HTML中的文本区textarea发送换行的测试
一直都在想在HTML前端页面表单的文本区textarea输入换行的时候,服务器接收到的这个文本区的数据是什么样的。
都知道不同的操作系统对于换行的表达不一样,Windows的换行符号是“\r\n”、类Unix系统换行符号是“\n”、而Mac OS换行符号则是“\r”(Mac OS 9以前是“\r”,以后就是“\n”了)
我其实就是想了解一下:
如果客户端是Win系统,服务端是类Unix系统,那么在客户端提交的表单内的换行符号是什么?
反之呢?
我开始想应该是同服务器无关,同客户端有关系的,根据客户端的系统进行显示的。
今天在mac os(安装在虚拟机上的)上测试了一下,发现结果跟想像的是不同的。
貌似与服务和客户端都没关系,通过表单发送的数据换行符号就是“\r\n”(CRLF)
感觉真的很奇怪~~或许是我困了?搞糊涂了?疑惑中……
话说服务器端容易判断,可以根据操作系统判断,也可以使用PHP自带的一个常量(PHP_EOL,它会根据服务器操作系统输出“\r\n”或“\n”)进行判断。
其实这个没什么大不了的,只是想刨根问底的了解一下而已。
在开发中,我实际经常将“\r\n”做为固定的换行符,而不去考虑服务器操作系统是什么,在所有涉及此类操作的时候都认定换行符为“\r\n”。
对于用户发送过来的数据,也会格式化一下换行符号变成“\r\n”。
自己写了一个函数去处理这个操作,很简单,无非是利用字符替换函数将“\r\n”、“\r”、“\n”,先替换成一个自定义的字符串(需要复杂一些,理由你懂得),然后再将这个自定义字符串替换成“\r\n”,
其实这样还不完善,有可能会导致明明是一个换行符但给格式化成两个(或以上)了,不过,此类情况一般都是非正常的输入,很有可能是非法伪造的数据,因此不用理会。
function format_linebreak($string,$newlb = "\r\n"){ if ( is_array($string) ) { foreach ( $string AS $key=>$val ) { $string[$key] = format_linebreak($val,$newlb); } } else { $sysnbstr = ''; $string = str_replace($sysnbstr,'',$string); if ( strpos($string,"\r\n") !== false ) { $string = str_replace("\r\n",$sysnbstr,$string); } if ( strpos($string,"\n") !== false ) { $string = str_replace("\n",$sysnbstr,$string); } if ( strpos($string,"\r") !== false ) { $string = str_replace("\r",$sysnbstr,$string); } $string = str_replace($sysnbstr,$newlb,$string); } return $string; }标签:Function, PHP, 开发