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

Ary*_*n G 4 php textarea explode

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

$arr=explode("\r\n",$getdata);
Run Code Online (Sandbox Code Playgroud)

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

$arr=explode("\n",$getdata);
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Emi*_*röm 6

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

$arr = explode(PHP_EOL, $getdata);
Run Code Online (Sandbox Code Playgroud)

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

$getdata = str_replace("\r\n", "\n", $getdata);
$arr = explode("\n", $getdata);
Run Code Online (Sandbox Code Playgroud)


Nik*_*kiC 6

据我所知分裂由换行符字符串最好的方法是preg_split\R:

preg_split('~\R~', $str);
Run Code Online (Sandbox Code Playgroud)

\R匹配任何Unicode行序列,即不仅LF,CR,CRLF,也更奇特的像VT,FF,NEL,LSPS.

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

preg_split('~(*BSR_ANYCRLF)\R~', $str);
Run Code Online (Sandbox Code Playgroud)

这将仅匹配"经典"换行序列.