我已经使用爆炸函数来获取textarea的包含到基于行的数组中。当我在我的本地主机(WAMPserver 2.1)运行这段代码符合本规则很好地工作:爆炸错误 r n和 n在Windows和Linux服务器
$arr=explode("\r\n",$getdata);
当我上传到我的Linux服务器,我需要每次更改上面的代码为:
$arr=explode("\n",$getdata);
什么将是我永久的解决方案。哪些常见的代码适用于我的两台服务器?
谢谢
我已经使用爆炸函数来获取textarea的包含到基于行的数组中。当我在我的本地主机(WAMPserver 2.1)运行这段代码符合本规则很好地工作:爆炸错误 r n和 n在Windows和Linux服务器
$arr=explode("\r\n",$getdata);
当我上传到我的Linux服务器,我需要每次更改上面的代码为:
$arr=explode("\n",$getdata);
什么将是我永久的解决方案。哪些常见的代码适用于我的两台服务器?
谢谢
恒定PHP_EOL包含依赖于平台的换行,所以你可以试试这个:
$arr = explode(PHP_EOL, $getdata);
但更好的是标准化的文本,因为你永远不知道什么操作系统上的访客使用。这是一种方式,以标准化为仅可使用\ n作为换行符(但也看到亚历克斯的答案,因为他正则表达式将处理所有类型的换行的):
$getdata = str_replace("\r\n", "\n", $getdata);
$arr = explode("\n", $getdata);
的PHP_EOL常量包含主机操作系统的的字符序列新队。
$arr=explode(PHP_EOL,$getdata);
你可以使用preg_split()
这将使不管它的工作:
$arr = preg_split('/\r?\n/', $getdata);
好,最好的办法是标准化输入数据只使用\n
,像这样:
$input = preg_replace('~\r[\n]?~', "\n", $input);
由于:
\n
。\r\n
。\r
。尽管如此,通过\n
爆炸应该得到最好的结果(如果你不正常化)。
据我所知分裂由换行符的字符串的最佳方式是preg_split
和\R
:
preg_split('~\R~', $str);
\R
匹配任何Unicode行序列,即不仅LF
,CR
,CRLF
,也更奇特诸如VT
,FF
,NEL
,LS
和PS
。
如果不需要这种行为(为什么?),你可以指定BSR_ANYCRLF
选项:
preg_split('~(*BSR_ANYCRLF)\R~', $str);
这将只匹配“经典”换行序列。
虽然有些操作系统使用\ r作为换行符,但您也需要处理。 – GordonM 2011-04-24 08:54:37
GordonM,你是对的。十年前的Mac OS 9使用\ r(以及80年代的一些系统),但我认为任何人都不会在旧软件上运行Web服务器。 – 2011-04-24 09:00:13
确实够不错,但它绝不会让你的基地受到影响:) – GordonM 2011-04-24 09:01:11