简单,是吧?嗯,这是行不通的:-\
$skuList = explode('\n\r', $_POST['skuList']);
简单,是吧?嗯,这是行不通的:-\
$skuList = explode('\n\r', $_POST['skuList']);
当前回答
这个PHP函数用换行符拆分字符串 注意:Windows中的新行是\r\n, Linux和Unix中的新行是\n 这个函数将所有新行更改为Linux模式,然后将其拆分。注意,空行将被忽略
function splitNewLine($text) {
$code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text)));
return explode("\n",$code);
}
例子
$a="\r\n\r\n\n\n\r\rsalam\r\nman khobam\rto chi\n\rche khabar\n\r\n\n\r\r\n\nbashe baba raftam\r\n\r\n\r\n\r\n";
print_r( splitNewLine($a) );
输出
Array
(
[0] => salam
[1] => man khobam
[2] => to chi
[3] => che khabar
[4] => bashe baba raftam
)
其他回答
看起来很简单
$skuList = explode('\\n', $_POST['skuList']);
你只需要传递准确的文本“\n”,直接写“\n”被用作转义序列。输入"\\"传递一个简单的反斜杠然后输入"n"
对于一条新线来说,这只是
$list = explode("\n", $text);
对于一个新的行和回车(就像在Windows文件中一样),它就像你发布的那样。你的skuList是一个文本区域吗?
最佳实践
正如第一个答案的注释中提到的,最佳实践是使用PHP常量PHP_EOL,它表示当前系统的EOL(行结束)。
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP提供了许多其他非常有用的常量,您可以使用这些常量使您的代码独立于系统,请参阅此链接以查找有用且独立于系统的目录常量。
警告
这些常量使您的页面系统独立,但是当您将这些常量用于存储在另一个系统上的数据时,从一个系统转移到另一个系统时可能会遇到问题。新系统的常数可能与以前的系统不同,存储的数据可能不再工作。因此,在存储数据之前完全解析数据,以删除任何与系统相关的部分。
更新
Andreas的评论让我意识到我在这里提出的“最佳实践”解决方案并不适用于所描述的用例:服务器的EOL (PHP)与浏览器(任何操作系统)正在使用的EOL没有任何关系,但(浏览器)是字符串的来源。
所以请使用@Alin_Purcaru的解决方案来覆盖你所有的基础:
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
试试“\n\r”(双引号)或者“\n”。
如果您不确定您拥有哪种类型的EOL,在爆炸之前运行str_replace,将“\n\r”替换为“\n”。
以下是对我有效的方法。在PHP 5.6和PHP 7.0中测试:
$skuList = str_replace("\\r\\n", "\n", $_POST['skuList']);
$skuList = str_replace("\\n\\r", "\n", $skuList);
$skuList = preg_split("/\n/", $skuList);
print_r($skuList);