简单吧?好吧,这不起作用:-\
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
也不例外。
简单吧?好吧,这不起作用:-\
$skuList = explode('\n\r', $_POST['skuList']);
\r\n
也不例外。
Answers:
最佳实践
如第一个答案的注释中所述,最佳实践是使用PHP常量PHP_EOL,它代表当前系统的EOL(行尾)。
$skuList = explode(PHP_EOL, $_POST['skuList']);
PHP提供了许多其他非常有用的常量,您可以使用它们使代码系统独立,请参见此链接以找到有用的且与系统无关的目录常量。
警告
这些常数使您的页面系统独立,但是当将常数与存储在另一系统上的数据一起使用时,从一个系统移动到另一个系统时可能会遇到问题。新系统的常数可能与先前系统的常数不同,并且存储的数据可能不再起作用。因此,在存储数据之前先完全解析数据,以删除所有与系统有关的部分。
更新
Andreas的评论使我意识到,此处介绍的“最佳实践”解决方案不适用于所描述的用例:服务器的EOL(PHP)与浏览器(任何OS)使用的EOL没有任何关系,但是(浏览器)是字符串的来源。
因此,请使用@Alin_Purcaru中的解决方案(三步向下)覆盖您的所有基础(并赞扬他的回答):
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
涵盖所有情况。不要依靠您的输入来自Windows环境。
$skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
要么
$skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
\r\n
。为了防止这种情况,无论是使用:preg_split('/\n|\r/', $_POST['skuList'], -1, PREG_SPLIT_NO_EMPTY);
(注意,\r\n
使用该标志时不需要),或者干脆把\r\n
之前的\r
:preg_split('/\r\n|\n|\r/', $_POST['skuList']);
尝试"\n\r"
(双引号)或仅"\n"
。
如果不确定所使用的EOL类型,请在爆炸前运行str_replace,将“ \ n \ r”替换为“ \ n”。
/n/r
?我知道OP写道,但是正确的Windows eol是\r\n
PHP_EOL
。
explode("\n", str_replace("\r", '', $string));
这里有很多东西:
\r\n
不是\n\r
。\n
没有\r
(或者甚至在不寻常的情况下,可能只是\r
)考虑到最后一点,您可能会发现preg_split()
使用所有可能的变体会比提供一种更可靠的数据分割方法explode()
。但是,您也可以使用explode()
just \n
,然后使用trim()
来删除所有\r
剩下的字符。
此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
)
将\n
双引号放在:
explode("\n", $_POST['skuList']);
用单引号括起来,如果我没记错的话,将其视为\
和n
分开对待。
看起来很容易
$skuList = explode('\\n', $_POST['skuList']);
您只需要传递准确的文本“ \ n”,然后直接写\ n即可用作转义序列。因此,“ \\”传递一个简单的反斜杠,然后输入“ n”
首先,我认为通常是这样\r\n
,其次,在所有系统上都不一样。那只会在Windows上起作用。试图找出如何替换新行是一种烦人的做法,因为不同的系统对它们的处理方式有所不同(请参阅此处)。你也许会拥有更好的运气\n
。
从输入文本框中发布时丢失换行符?
对我来说,更快的方法是复制粘贴任何文本或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];
此方法始终对我有效:
$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'])));