简单,是吧?嗯,这是行不通的:-\

$skuList = explode('\n\r', $_POST['skuList']);

当前回答

首先,我认为通常是\r\n,其次,这些在所有系统中都不一样。这只对窗口有效。试图弄清楚如何替换新行有点烦人,因为不同的系统对它们的处理不同(见这里)。你可能会有更好的运气只\n。

其他回答

把\n放在双引号中:

explode(“\n”, $_POST['skuList']);

在单引号中,如果我没有记错的话,它被分别视为\和n。

你试过用双引号吗?

如果内容可能在系统外部生成,那么系统使用什么作为换行符并不重要。

在收到所有这些答案后,我很惊讶,没有人简单地建议使用\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',
)

这个方法对我来说总是有效的:

$uniquepattern="@#$;?:~#abcz"//Any set of characters which you dont expect to be present in user input $_POST['skuList'] better use atleast 32 charecters.
$skuList=explode($uniquepattern,str_replace("\r","",str_replace("\n",$uniquepattern,$_POST['skuList'])));

涵盖所有情况。不要依赖于您的输入来自Windows环境。

$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);

or

$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);