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

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

当前回答

try

explode(chr(10), $_POST['skuList']);

其他回答

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

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

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

你试过用双引号吗?

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

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

从输入文本框中发布时丢失换行符? 对我来说,更快的工作是复制粘贴任何文本或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];

保留换行符(作为数组中的空白项):

$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中有一个错误,导致它在第一次加载时显示“错误”。编辑表达式可以消除错误