什么时候使用php_ol是一个好主意?
我有时会在PHP代码示例中看到这种情况。这是否处理DOS/Mac/Unix终端线问题?
什么时候使用php_ol是一个好主意?
我有时会在PHP代码示例中看到这种情况。这是否处理DOS/Mac/Unix终端线问题?
当前回答
PHP_EOL的定义是,它为您提供正在操作的操作系统的换行符。
在实践中,您几乎不需要这个。考虑以下几个案例:
When you are outputting to the web, there really isn't any convention except that you should be consistent. Since most servers are Unixy, you'll want to use a "\n" anyway. If you're outputting to a file, PHP_EOL might seem like a good idea. However, you can get a similar effect by having a literal newline inside your file, and this will help you out if you're trying to run some CRLF formatted files on Unix without clobbering existing newlines (as a guy with a dual-boot system, I can say that I prefer the latter behavior)
PHP_EOL太长了,真的不值得使用。
其他回答
当jumi (joomla plugin for PHP)出于某种原因编译你的代码时,它会从你的代码中删除所有的反斜杠。例如$csv_output .= "\n";$csv_output .= "n";
非常讨厌的虫子!
使用PHP_EOL来获得您想要的结果。
我想提出一个解决“什么时候不使用它”的答案,因为它还没有被覆盖,可以想象它被盲目地使用,直到后来才有人注意到有问题。这与现有的答案有些矛盾。
如果在HTML中输出到网页,特别是<textarea>, <pre>或<code>中的文本,您可能总是想使用\n而不是PHP_EOL。
原因是,虽然代码可能在一台服务器上工作得很好-这恰好是一个类unix平台-如果部署在Windows主机(如Windows Azure平台)上,那么它可能会改变页面在某些浏览器(特别是Internet Explorer -某些版本将看到\n和\r)中的显示方式。
我不确定自IE6以来这是否仍然是一个问题,所以它可能是相当有争议的,但似乎值得一提,如果它有助于人们思考上下文。在其他情况下(比如严格的XHTML),在某些平台上突然输出\r可能会导致输出出现问题,我相信还有其他类似的边缘情况。
有人已经指出,当返回HTTP报头时,你不会想要使用它——因为它们在任何平台上都应该始终遵循RFC。
我不会将它用于CSV文件上的分隔符之类的东西(就像有人建议的那样)。服务器运行的平台不应该决定生成或使用的文件中的行结束符。
如果要输出多行,使用error_log()非常方便。
在我的windows安装中,我发现很多调试语句看起来很奇怪,因为开发人员在拆分字符串时假定unix结尾。
PHP 7.1.1和5.6.30版本的main/ PHP .h:
#ifdef PHP_WIN32
# include "tsrm_win32.h"
# include "win95nt.h"
# ifdef PHP_EXPORTS
# define PHPAPI __declspec(dllexport)
# else
# define PHPAPI __declspec(dllimport)
# endif
# define PHP_DIR_SEPARATOR '\\'
# define PHP_EOL "\r\n"
#else
# if defined(__GNUC__) && __GNUC__ >= 4
# define PHPAPI __attribute__ ((visibility("default")))
# else
# define PHPAPI
# endif
# define THREAD_LS
# define PHP_DIR_SEPARATOR '/'
# define PHP_EOL "\n"
#endif
正如你所看到的,PHP_EOL可以是“\r\n”(在Windows服务器上)或“\n”(在其他任何服务器上)。在5.4.0RC8之前的PHP版本中,PHP_EOL可能有第三个值:"\r"(在MacOSX服务器上)。这是错误的,已于2012-03-01修复,bug 61193。
正如其他人已经告诉您的那样,您可以在需要统一换行符的任何类型的输出中使用PHP_EOL(这些值中的任何一个都是有效的—例如:HTML、XML、日志……)。请记住,决定值的是服务器,而不是客户机。您的Windows访问者将从您的Unix服务器获取值,这有时对他们来说很不方便。
我只是想展示PHP源代码支持的PHP_EOL的可能值,因为这里还没有显示……
DOS/Windows标准的换行符是CRLF (= \r\n)而不是LFCR (\n\r)。如果我们选择后者,很可能会产生一些意想不到的结果(好吧,实际上是意料之中的!): D)的行为。
现在,几乎所有(编写良好的)程序都接受UNIX标准LF (\n)作为换行代码,甚至邮件发送守护进程(RFC将CRLF设置为标题和消息正文的换行)。