爆炸新线与" \ n"但不是PHP_EOL。为什么?

时间:2014-06-21 19:02:27

标签: php

我有这个字符串

enter image description here

如您所见,它显然包含一个新行。我想将该消息拆分为2个消息的数组,并且我认为我将explode()PHP_EOL结合使用,以实现多操作系统功能,但我感到很惊讶,因为它没有工作

explode(PHP_EOL, $str); // Array( [0] => "Divakat has attacked Gergana, dealing 591 physical damage. ( 2 absorbed )
                        // Gergana has died." )

explode("\n", $str); // Array( [0] => ""Divakat has attacked Gergana, dealing 591 physical damage. ( 2 absorbed )", [1] => "Gergana has died." )

我想问一下,为什么第一个例子没有像我期望的那样工作,并且有什么方法可以使它工作,因为我真的不想在那里硬编码新行字符。谢谢。

编辑:

我忘了提一下,该消息是在当前正在测试此代码的同一台机器上创建的。没有操作系统更改。

1 个答案:

答案 0 :(得分:4)

PHP_EOL表示您当前所在平台的行尾序列。它不会神奇地使字符串中使用的行尾序列与平台的序列相同。

例如,这是一个\n的字符串(Unix EOL硬编码):

$str = "Hello\nWorld";

如果在Unix系统上运行它,它将打印2:

echo count(explode(PHP_EOL, $str));

但在另一个平台上,它会打印1,因为$str既不包含Windows也不包含Mac EOL序列。

更新 输入的创建没有任何区别;只有如何创建它。您可以在Windows系统上轻松地使用Unix EOL创建一个字符串,只需在其中包含硬编码的\n