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

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

当前回答

这里有很多东西:

您需要使用双引号,而不是单引号,否则转义字符将不会被转义。 正常的序列是\r\n,而不是\n\r。 根据来源的不同,你可能只得到不带\r的\n(甚至在不寻常的情况下,可能只有\r)。

考虑到最后一点,您可能会发现使用所有可能的变体的preg_split()将为您提供比explosion()更可靠的数据分割方式。但是,您也可以只使用\n来使用explosion(),然后使用trim()来删除剩下的\r字符。

其他回答

以下是对我有效的方法。在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);

对于一条新线来说,这只是

$list = explode("\n", $text);

对于一个新的行和回车(就像在Windows文件中一样),它就像你发布的那样。你的skuList是一个文本区域吗?

试试“\n\r”(双引号)或者“\n”。

如果您不确定您拥有哪种类型的EOL,在爆炸之前运行str_replace,将“\n\r”替换为“\n”。

你试过用双引号吗?

这里有很多东西:

您需要使用双引号,而不是单引号,否则转义字符将不会被转义。 正常的序列是\r\n,而不是\n\r。 根据来源的不同,你可能只得到不带\r的\n(甚至在不寻常的情况下,可能只有\r)。

考虑到最后一点,您可能会发现使用所有可能的变体的preg_split()将为您提供比explosion()更可靠的数据分割方式。但是,您也可以只使用\n来使用explosion(),然后使用trim()来删除剩下的\r字符。