我已经使用explode函数将textarea的包含到基于行的数组中。当我在localhost(WAMPserver 2.1)中运行此代码时,它与此代码完美配合:
$arr=explode("\r\n",$getdata);
当我上传到我的linux服务器时,我需要每次都将上面的代码更改为:
$arr=explode("\n",$getdata);
对我来说永久解决方案是什么。哪种常用代码对我来说都适用于两台服务器?
谢谢
答案 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换行符序列,即LF
,CR
,CRLF
,还有VT
,{{1}等更具异国情调的序列},FF
,NEL
和LS
。
如果不想要这种行为(为什么?),您可以指定PS
选项:
BSR_ANYCRLF
这将仅匹配“经典”换行序列。
答案 2 :(得分:1)
嗯,最好的方法是将输入数据规范化为仅使用\n
,如下所示:
$input = preg_replace('~\r[\n]?~', "\n", $input);
自:
\n
。\r\n
。\r
。尽管如此,按\n
进行爆炸可以获得最佳效果(如果不进行规范化)。
答案 3 :(得分:0)
PHP_EOL常量包含主机操作系统换行符的字符序列。
$arr=explode(PHP_EOL,$getdata);
答案 4 :(得分:0)
您可以使用preg_split()
,无论如何都可以使用{<1}}。
$arr = preg_split('/\r?\n/', $getdata);