PHP:在换行符爆炸时添加了字符?

时间:2013-11-22 12:19:45

标签: php string arrays

考虑这段代码(http://codepad.org/lJGcW7tU):

$str = '1
2
3
4
5
6';

var_dump(explode("\n", $str));

我希望输出如下:

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似乎为所有新数组元素添加了一个额外的字符,除了最后一个。这个字符在原始字符串中没有,所以它来自哪里?为什么?

1 个答案:

答案 0 :(得分:3)

换行符为represented differently among different platforms。在Unix系统中,它只是"\n",而在基于Windows的系统上,它是"\r\n"

您的字符串可能包含"1\r\n2\r\n3\r\n(...)",这意味着当您在"\n"上拆分时,结果的第一个索引为"1\r",第二个索引为"2\r",依此类推。 ..

不同的可能解决方案:

  1. 将字符串初始化为$str = "1\n2\n3\n4\n5\n6";
  2. 在使用基于Unix的换行符的文本编辑器中编写PHP文件(一些更高级的文本编辑器可以设置使用哪种换行符)
  3. 拆分"\r\n"而非"\n"