用新行展开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 ,在Linux和Unix中是\ 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']));