在Windows和Linux服务器中爆炸错误\ r \ n和\ n

时间:2011-04-24 08:47:42

标签: php textarea explode

我已经使用explode函数将textarea的包含到基于行的数组中。当我在localhost(WAMPserver 2.1)中运行此代码时,它与此代码完美配合:

$arr=explode("\r\n",$getdata);

当我上传到我的linux服务器时,我需要每次都将上面的代码更改为:

$arr=explode("\n",$getdata);

对我来说永久解决方案是什么。哪种常用代码对我来说都适用于两台服务器?

谢谢

5 个答案:

答案 0 :(得分:6)

常量PHP_EOL包含与平台相关的换行符,因此您可以尝试:

$arr = explode(PHP_EOL, $getdata);

但更好的是规范化文本,因为您永远不知道访问者使用的操作系统。这是一种标准化的方法,只能使用\ n作为换行符(但也可以看到Alex的答案,因为他的正则表达式将处理所有类型的换行符):

$getdata = str_replace("\r\n", "\n", $getdata);
$arr = explode("\n", $getdata);

答案 1 :(得分:6)

据我所知,按换行符拆分字符串的最佳方法是preg_split\R

preg_split('~\R~', $str);

\R匹配任何Unicode换行符序列,即LFCRCRLF,还有VT,{{1}等更具异国情调的序列},FFNELLS

如果不想要这种行为(为什么?),您可以指定PS选项:

BSR_ANYCRLF

这将仅匹配“经典”换行序列。

答案 2 :(得分:1)

嗯,最好的方法是将输入数据规范化为仅使用\n,如下所示:

$input = preg_replace('~\r[\n]?~', "\n", $input);

自:

  • Unix使用\n
  • Windows使用\r\n
  • (旧)Mac OS使用\r

尽管如此,按\n进行爆炸可以获得最佳效果(如果不进行规范化)。

答案 3 :(得分:0)

PHP_EOL常量包含主机操作系统换行符的字符序列。

$arr=explode(PHP_EOL,$getdata);

答案 4 :(得分:0)

您可以使用preg_split(),无论如何都可以使用{<1}}。

$arr = preg_split('/\r?\n/', $getdata);