什么时候使用php_ol是一个好主意?

我有时会在PHP代码示例中看到这种情况。这是否处理DOS/Mac/Unix终端线问题?


当前回答

不,PHP_EOL不处理端点问题,因为使用该常量的系统与将输出发送到的系统不同。

我完全不建议使用PHP_EOL。Unix/Linux使用\n, MacOS / OS X也从\r改为\n,在Windows上,许多应用程序(特别是浏览器)也可以正确显示它。在Windows上,更改现有的客户端代码仅使用\n并保持向后兼容性也很容易:只需将行切边的分隔符从\r\n更改为\n,并将其包装在类似trim()的函数中。

其他回答

PHP_EOL(字符串) 此平台的正确“行结束”符号。 自PHP 4.3.10和PHP 5.0.2起可用

当读写服务器文件系统上的文本文件时,可以使用这个常量。

在大多数情况下,行结束并不重要,因为大多数软件都能够处理文本文件,而不管它们的来源。你应该与你的代码保持一致。

如果行结束符很重要,则显式地指定行结束符,而不是使用常量。例如:

HTTP报头必须用\r\n分隔 CSV文件应该使用\r\n作为行分隔符

是的,PHP_EOL表面上用于以跨平台兼容的方式查找换行符,因此它处理DOS/Unix问题。

注意,PHP_EOL表示当前系统的结束字符。例如,当在类unix系统上执行时,它将找不到Windows结束行。

我正在使用WebCalendar,发现Mac iCal在导入生成的ics文件时呕吐,因为行尾在xcal.php中硬编码为“\r\n”。我进去,用PHP_EOL替换了所有的事件,现在iCal是快乐的! 我还在Vista和Outlook上进行了测试,即使行尾字符是“\n”,也能导入文件。

有一个明显的地方它可能有用:当您编写主要使用单引号字符串的代码时。有争议的是:

echo 'A $variable_literal that I have'.PHP_EOL.'looks better than'.PHP_EOL;  
echo 'this other $one'."\n";

它的艺术在于始终如一。混合和匹配"和"的问题是,当你得到很长的字符串时,你真的不想去寻找你使用的引用类型。

就像生活中的所有事情一样,这取决于上下文。

我想提出一个解决“什么时候不使用它”的答案,因为它还没有被覆盖,可以想象它被盲目地使用,直到后来才有人注意到有问题。这与现有的答案有些矛盾。

如果在HTML中输出到网页,特别是<textarea>, <pre>或<code>中的文本,您可能总是想使用\n而不是PHP_EOL。

原因是,虽然代码可能在一台服务器上工作得很好-这恰好是一个类unix平台-如果部署在Windows主机(如Windows Azure平台)上,那么它可能会改变页面在某些浏览器(特别是Internet Explorer -某些版本将看到\n和\r)中的显示方式。

我不确定自IE6以来这是否仍然是一个问题,所以它可能是相当有争议的,但似乎值得一提,如果它有助于人们思考上下文。在其他情况下(比如严格的XHTML),在某些平台上突然输出\r可能会导致输出出现问题,我相信还有其他类似的边缘情况。

有人已经指出,当返回HTTP报头时,你不会想要使用它——因为它们在任何平台上都应该始终遵循RFC。

我不会将它用于CSV文件上的分隔符之类的东西(就像有人建议的那样)。服务器运行的平台不应该决定生成或使用的文件中的行结束符。