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”
  • 在使用基于Unix的换行符的文本编辑器中编写PHP文件(一些更高级的文本编辑器具有使用哪种换行符的设置)
  • “\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"
    }