简单,是吧?嗯,这是行不通的:-\
$skuList = explode('\n\r', $_POST['skuList']);
简单,是吧?嗯,这是行不通的:-\
$skuList = explode('\n\r', $_POST['skuList']);
当前回答
涵盖所有情况。不要依赖于您的输入来自Windows环境。
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
or
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
其他回答
这里有很多东西:
您需要使用双引号,而不是单引号,否则转义字符将不会被转义。 正常的序列是\r\n,而不是\n\r。 根据来源的不同,你可能只得到不带\r的\n(甚至在不寻常的情况下,可能只有\r)。
考虑到最后一点,您可能会发现使用所有可能的变体的preg_split()将为您提供比explosion()更可靠的数据分割方式。但是,您也可以只使用\n来使用explosion(),然后使用trim()来删除剩下的\r字符。
如果内容可能在系统外部生成,那么系统使用什么作为换行符并不重要。
在收到所有这些答案后,我很惊讶,没有人简单地建议使用\R转义序列。只有一种方法可以让我考虑在自己的项目中实现它。\R提供了最简洁和直接的方法。
https://www.php.net/manual/en/regexp.reference.escape.php # ~:短信=线% 20break: 20matches % 20 \ n % 20, r 20and % 20 \ r \ n
代码:(演示)
$text = "one\ntwo\r\nthree\rfour\r\n\nfive";
var_export(preg_split('~\R~', $text));
输出:
array (
0 => 'one',
1 => 'two',
2 => 'three',
3 => 'four',
4 => '',
5 => 'five',
)
虽然不完美,但我认为这是最安全的。添加nl2br:
$skuList = explode('<br />', nl2br($_POST['skuList']));
try
explode(chr(10), $_POST['skuList']);
把\n放在双引号中:
explode(“\n”, $_POST['skuList']);
在单引号中,如果我没有记错的话,它被分别视为\和n。