简单,是吧?嗯,这是行不通的:-\
$skuList = explode('\n\r', $_POST['skuList']);
简单,是吧?嗯,这是行不通的:-\
$skuList = explode('\n\r', $_POST['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']);
其他回答
以下是对我有效的方法。在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);
从输入文本框中发布时丢失换行符? 对我来说,更快的工作是复制粘贴任何文本或Excel或HTML表格类型或换行数据类型,并将其粘贴到文本区域而不是输入文本框: 这使得换行符在POST中保持完整。
<textarea id="txtArea" name="txtArea" rows="40" cols="170"></textarea>
<br>
<input type="submit" value="split lines into array" />
表单接收文件中:
$txtArea ='';
$txtArea = $_POST['txtArea'];
$TA = $_POST['txtArea'];
$string = $TA;
$array = preg_split ('/$\R?^/m', $string);
// or any of these:
// $array = explode(PHP_EOL,$string);
// $array = explode("\n", $txtArea);
echo "<br>A0: ".$array[0];
echo "<br>A1: ".@$array[1];
echo "<br>A2: ".@$array[2];
try
explode(chr(10), $_POST['skuList']);
如果内容可能在系统外部生成,那么系统使用什么作为换行符并不重要。
在收到所有这些答案后,我很惊讶,没有人简单地建议使用\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']));