简单,对吧?嗯,这不起作用: - \
$skuList = explode('\n\r', $_POST['skuList']);
答案 0 :(得分:338)
最佳实践
正如第一个答案的评论中所提到的,最佳做法是使用代表当前系统的EOL( End Of Line )的PHP常量PHP_EOL。
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP提供了许多其他非常useful constants可用于使代码系统独立的内容,请参阅this link以查找有用且与系统无关的目录常量。
警告强>
这些常量使您的页面系统独立,但是当您将常量与存储在另一个系统上的数据一起使用时,从一个系统移动到另一个系统时可能会遇到问题。新系统的常量可能与以前的系统不同,存储的数据可能不再起作用。因此,在存储数据之前,请完全解析数据,以删除任何与系统相关的部分。
<强>更新强>
安德烈亚斯&#39;评论让我意识到最佳实践&#39;我在这里提出的解决方案不适用于所描述的用例:服务器的EOL(PHP)与浏览器(任何操作系统)正在使用的EOL没有任何关系,但是(浏览器)是字符串来自。
所以请使用@Alin_Purcaru(three down)的解决方案来涵盖你的所有基础(并提出他的回答):
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
答案 1 :(得分:200)
涵盖所有案件。不要依赖您的输入来自Windows环境。
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
或
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
答案 2 :(得分:148)
尝试"\n\r"
(双引号)或"\n"
。
如果您不确定自己的EOL类型,请在爆炸前运行str_replace,将“\ n \ r”替换为“\ n”。
答案 3 :(得分:13)
这里有很多东西:
\r\n
,而不是\n\r
。\n
而没有\r
(或者甚至在不常见的情况下,可能只是\r
)鉴于最后一点,您可能会发现preg_split()
使用所有可能的变体将为您提供比explode()
更可靠的分割数据的方式。但另外,您可以explode()
只使用\n
,然后使用trim()
删除任何遗留下来的\r
个字符。
答案 4 :(得分:11)
这个php函数通过换行符爆炸字符串。
注意: Windows 中的新行 \ r \ n 以及 Linux 和 Unix 是 \ n
此函数将所有新行更改为 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
)
答案 5 :(得分:9)
试
explode(chr(10), $_POST['skuList']);
答案 6 :(得分:6)
对于新行,它只是
$list = explode("\n", $text);
对于新行和回车(如在Windows文件中),它就像您发布的那样。你的skuList是一个文本区吗?
答案 7 :(得分:4)
将\n
放在双引号中:
explode("\n", $_POST['skuList']);
在单引号中,如果我没有记错,则将其分别视为\
和n
。
答案 8 :(得分:3)
您是否尝试使用双引号?
答案 9 :(得分:3)
不完美,但我认为它必须是最安全的。添加nl2br:
$skuList = explode('<br />', nl2br($_POST['skuList']));
答案 10 :(得分:1)
试试这个:
explode(PHP_EOF, $lines);
答案 11 :(得分:1)
如果内容可以在系统外部生成,则系统用作换行符并不重要。
收到所有这些答案后,我感到非常惊讶,没有人简单地建议使用\R
转义序列。我只有一种方法可以考虑在自己的项目中实施此方法。 \R
提供了最简洁直接的方法。
代码:(Demo)
$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',
)
答案 12 :(得分:0)
首先,我认为它通常是\r\n
,其次,在所有系统上都不一样。这只适用于Windows。尝试弄清楚如何替换新行是很烦人的,因为不同的系统对它们的处理方式不同(参见here)。仅\n
可能会有更好的运气。
答案 13 :(得分:0)
如果其他人尝试了这个但它没有用,那么这提醒你,你可能和我一样做了大脑放屁。
你有没有mysql首先转义字符串?在这种情况下,换行符不再是换行符。
我没有做任何事情来避免解析它,只是通过'\ n'(字面上的反斜杠和 n 而不是实际的换行符来调整和爆炸。
答案 14 :(得分:0)
输入文本框中的帖子丢失换行符?
对我来说更快的是复制粘贴任何文本或Excel或HTML表格类型或换行类型的数据并将其粘贴到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];
答案 15 :(得分:0)
此方法始终适用于我:
$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'])));
答案 16 :(得分:0)
PHP_EOL
表面上用于以跨平台兼容的方式查找换行符,因此它处理DOS / Unix问题。
试试这个:
$myString = "Prepare yourself to be caught
You in the hood gettin' shot
We going throw hell of blows
got my whole frame froze";
$myArray = explode(PHP_EOL, $myString);
print_r($myArray);
答案 17 :(得分:0)
您可以使用正则表达式进行尝试:
To: =?UTF-8?B?QmzDtmRtYW5u?= <guru@sisis.de>, =?UTF-8?B?R3Jvw59tYW5u?= <guru@example.com>
答案 18 :(得分:0)
这对我有用。在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);
答案 19 :(得分:0)
看起来很简单
$skuList = explode('\\n', $_POST['skuList']);
您只需要传递确切的文本“ \ n” ,直接编写 \ n 即可用作转义序列。因此,“ \\” 传递一个简单的反斜杠,然后放置“ n”