PHP:在换行符上爆炸时添加字符?
考虑以下代码(): 我希望输出如下:PHP:在换行符上爆炸时添加字符?,php,string,arrays,Php,String,Arrays,考虑以下代码(): 我希望输出如下: array(6) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" [4]=> string(1) "5" [5]=> string(1) "6" } 但实际上是这样的: array(6) { [0]=> string(2) "1 " [1]=
array(6) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
[5]=>
string(1) "6"
}
但实际上是这样的:
array(6) {
[0]=>
string(2) "1
"
[1]=>
string(2) "2
"
[2]=>
string(2) "3
"
[3]=>
string(2) "4
"
[4]=>
string(2) "5
"
[5]=>
string(1) "6"
}
explode
似乎为所有新数组元素(最后一个除外)添加了一个额外字符。这个字符不在原始字符串中,那么它是从哪里来的呢?为什么呢?断线是很危险的。在Unix系统中,它只是“\n”
,而在基于Windows的系统中,它是“\r\n”
您的字符串可能包含“1\r\n2\r\n3\r\n(…)”
,这意味着当您在“\n”
上拆分它时,结果的第一个索引是“1\r”
,第二个索引是“2\r”
,依此类推
不同的可能解决方案:
$str=“1\n2\n3\n4\n5\n6”代码>
“\r\n”
上拆分,而不仅仅是“\n”
很遗憾,您的问题与代码审查无关。有关编码时遇到的特定问题的问题,请尝试。在使代码正常工作(按您希望的方式)后,您可以编辑此问题,以查看您的工作代码。那么,我是否应该删除它并将其放置在堆栈溢出上?我希望版主会为您迁移它。所以现在不要担心。相反,试试我下面建议的可能的解决方案,看看它们是否适合你。这可能是正确的。在
\r\n
上拆分可以正常工作。我已经通过修剪结果解决了这个问题:array\u map('trim',explode(“\n”,$str))
,但我仍然不知道\r\n
中断是从哪里来的。脚本(我的真实脚本)在Unix机器上运行,字符串来自MySQL数据库,我通过Mac上的浏览器与之交互(因此也没有Windows机器)。难道这一切都不应该是\n
然后中断吗?@kasimir这取决于字符串是如何插入数据库的。如果可能,请逐个字节检查数据库中的实际字符串。如果存储在数据库中的字符串可以同时包含\r\n
换行符和\n
换行符,则最好按原样修剪字符串。如果需要保留空白,可以使用以下任意一行结尾进行拆分:preg\u split(“/\r?\n/”,$str)
。空白?我在寻找解释的不必要的空白?我为什么要保留它?
array(6) {
[0]=>
string(2) "1
"
[1]=>
string(2) "2
"
[2]=>
string(2) "3
"
[3]=>
string(2) "4
"
[4]=>
string(2) "5
"
[5]=>
string(1) "6"
}