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, 开发

评论当前被关闭。

Deepseath Modified from Green Hope Theme · Proudly powered by WordPress · 津ICP备09005418号-1  津公网安备 12010302001005号