用新行展开PHPstring

很简单,对吧? 那么,这是行不通的: – \

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

最佳实践

正如在第一个回答的评论中提到的,最好的做法是使用PHP常量PHP_EOL ,它代表当前系统的EOL( End Of Line )。

 $skuList = explode(PHP_EOL, $_POST['skuList']); 

PHP提供了很多其他非常有用的常量 ,您可以使用这些常量来使代码系统独立,请参阅此链接以查找有用且与系统无关的目录常量。

警告

这些常量可以使页面系统独立,但是当您将常量与存储在另一个系统上的数据一起使用时,从一个系统移动到另一个系统时可能会遇到问题。 新系统的常量可能与以前的系统不同,存储的数据可能不再工作。 因此,在存储数据之前先彻底parsing您的数据以删除任何依赖于系统的部分

UPDATE

Andreas的评论让我意识到,我在这里介绍的“最佳实践”解决scheme并不适用于所描述的用例:服务器的EOL(PHP)与浏览器(任何操作系统)所使用的EOL没有任何关系,但是(浏览器)是string来自哪里。

所以请使用来自@Alin_Purcaru( 三下 )的解决scheme来覆盖您的所有基础(并提高他的答案):

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

尝试"\n\r" (双引号)或只是"\n"

如果您不确定哪种types的EOL,请在爆炸前运行str_replace,将“\ n \ r”replace为“\ n”。

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

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

要么

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

很多东西在这里:

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

给出最后一点,你可能会发现preg_split()使用所有可能的变体将会给你一个比explode()更可靠的分裂数据的方法。 但是,也可以使用explode() ,然后使用trim()删除任何剩余的\r字符。

这个PHP函数用换行符爆炸string

注意Windows中的新行是\ r \ n ,在LinuxUnix中\ n
此function将所有新行更改为linux模式,然后将其拆分。
注意空行会被忽略

 function splitNewLine($text) { $code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text))); return explode("\n",$code); } 

 $a="\r\n\r\n\n\n\r\rsalam\r\nman khobam\rto chi\n\rche khabar\n\r\n\n\r\r\n\nbashe baba raftam\r\n\r\n\r\n\r\n"; print_r( splitNewLine($a) ); 

产量

 Array ( [0] => salam [1] => man khobam [2] => to chi [3] => che khabar [4] => bashe baba raftam ) 

尝试

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

\n放在双引号中:

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

在单引号中,如果我没有弄错,分别作为\n来处理。

你尝试使用双引号?

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

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

对于新行和回车(如在Windows文件中),这是你张贴。 你的skuList是一个文本区域吗?

尝试这个:

 explode(PHP_EOF, $lines); 

首先,我认为这通常是\r\n ,其次是所有系统都不一样。 这只会在Windows上工作。 试图弄清楚如何更换新的线路是一种讨厌的事情,因为不同的系统对待它们的方式不同(见这里 )。 \n可能会有更好的运气。

如果其他人试过这个,但是它不起作用,这提醒你可能做了和我一样的脑部放屁。

你有没有MySQL首先逃脱了string? 在这种情况下,换行符不再是换行符。

我没有做任何事情来避免parsing它,只是适应和爆炸'\ n'(字面上反斜杠和n而不是实际的换行符)。

从input文本框中发布input中断线?
对我来说更快的方法是复制粘贴任何文本或Excel或HTML表格types或换行符types的数据,并将其粘贴到textarea而不是inputextbox中:这样可以保持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]; 

这个方法总是适用于我:

 $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']))); 

不完美,但我认为这一定是最安全的。 添加nl2br :

 $skuList = explode('<br />', nl2br($_POST['skuList']));