简单,是吧?嗯,这是行不通的:-\
$skuList = explode('\n\r', $_POST['skuList']);
简单,是吧?嗯,这是行不通的:-\
$skuList = explode('\n\r', $_POST['skuList']);
当前回答
保留换行符(作为数组中的空白项):
$skuList = preg_split('/\r\n|\n\r|\r|\n/', $_POST['skuList']);`
它处理不寻常的\n\r以及常见的\n\r, \n和\r。注意,来自@Alin_Purcaru的解决方案非常相似,但不处理\n\r。
删除换行符(数组中没有空白项):
$skuList = preg_split('/[\r\n]+/', $_POST['skuList']);
PHP测试 这些表达式已在以下操作系统上测试:ubuntu-20.04, ubuntu-18.04, windows-2022, windows-2019, windows-2016, macos-11, macos-10.15和以下PHP版本:8.0,7.4,7.3,7.2,7.1,7.0
下面是PHP测试类: https://github.com/rosell-dk/exec-with-fallback/blob/main/tests/LineSplittingTest.php
一个成功的CI运行在一个运行这些测试的项目上: https://github.com/rosell-dk/exec-with-fallback/actions/runs/1520070091
原理的Javascript演示 下面是一些类似正则表达式的javascript演示(我使用N和R而不是\ N和\ R)。
保留换行演示:https://regexr.com/6ahvl 删除换行演示:https://regexr.com/6ai0j
PS:目前在regexr中有一个错误,导致它在第一次加载时显示“错误”。编辑表达式可以消除错误
其他回答
这个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
)
这里有很多东西:
您需要使用双引号,而不是单引号,否则转义字符将不会被转义。 正常的序列是\r\n,而不是\n\r。 根据来源的不同,你可能只得到不带\r的\n(甚至在不寻常的情况下,可能只有\r)。
考虑到最后一点,您可能会发现使用所有可能的变体的preg_split()将为您提供比explosion()更可靠的数据分割方式。但是,您也可以只使用\n来使用explosion(),然后使用trim()来删除剩下的\r字符。
保留换行符(作为数组中的空白项):
$skuList = preg_split('/\r\n|\n\r|\r|\n/', $_POST['skuList']);`
它处理不寻常的\n\r以及常见的\n\r, \n和\r。注意,来自@Alin_Purcaru的解决方案非常相似,但不处理\n\r。
删除换行符(数组中没有空白项):
$skuList = preg_split('/[\r\n]+/', $_POST['skuList']);
PHP测试 这些表达式已在以下操作系统上测试:ubuntu-20.04, ubuntu-18.04, windows-2022, windows-2019, windows-2016, macos-11, macos-10.15和以下PHP版本:8.0,7.4,7.3,7.2,7.1,7.0
下面是PHP测试类: https://github.com/rosell-dk/exec-with-fallback/blob/main/tests/LineSplittingTest.php
一个成功的CI运行在一个运行这些测试的项目上: https://github.com/rosell-dk/exec-with-fallback/actions/runs/1520070091
原理的Javascript演示 下面是一些类似正则表达式的javascript演示(我使用N和R而不是\ N和\ R)。
保留换行演示:https://regexr.com/6ahvl 删除换行演示:https://regexr.com/6ai0j
PS:目前在regexr中有一个错误,导致它在第一次加载时显示“错误”。编辑表达式可以消除错误
虽然不完美,但我认为这是最安全的。添加nl2br:
$skuList = explode('<br />', nl2br($_POST['skuList']));
试试这个:
explode(PHP_EOF, $lines);