在大多数情况下,对于一个互动网站,当我们向网络客户端浏览器输出多行内容时,我认为<BR />
比其他两个更受欢迎:\n
或{{ 1}}。
否则,我们需要使用&#34; PHP_EOL
&#34;包装输出内容或使用<pre></pre>
在nl2br()
之前插入<BR />
,以便多行标记可以在HTML中生效。如下面的例子。
\n
有些人认为$fruits = array('a'=>'apple', 'b'=>'banana', 'c'=>'cranberry');
// Multiple lines by \n
foreach( $fruits as $key => $value ){
echo "$key => $value \n" ;
}
// Multiple lines by PHP_EOL
reset( $fruits );
while ( list($key, $value) = each( $fruits ) ){
echo ("$key => $value" . PHP_EOL);
}
// Multiple lines by <BR />
reset( $fruits );
while ( list($key, $value) = each( $fruits ) ){
echo ("$key => $value <BR />");
}
在将数据写入文件时很有用,例如日志文件。无论您的平台如何,它都会创建换行符。
然后,我的问题是我们何时使用PHP_EOL
? \n
和\n
以及PHP_EOL
之间的区别是什么?任何机构都可以列出各自的优缺点吗?
答案 0 :(得分:30)
DOS - 使用CR + LF(ASCII 13后跟ASCII 10或\r\n
)来表示新行。
Unix - 使用LF(即ASCII 10或\n
)来表示新行。
Mac(OS X之前) - 使用CR(即ASCII 13或\r
)来表示新行。
Mac(OS X) - 与Unix一样,使用LF表示新行。
因此,何时使用每一个取决于你的目标。如果您是为了特定平台而不是为了便携而编写的,请使用字符或字符组合来打破与该平台无关的线条。 PHP_EOL
的目的是自动为平台选择正确的字符,以便您的新行与平台无关。
所有这些都显示为浏览器中的单个空间,因为浏览器会将空白空间拆分到显示空间中以供显示(除非您正如您所提到的那样使用<pre>
,或者使用改变空白行为的CSS)。正如您所提到的,这就是<br>
所在的位置,它会将这些\n
个新行字符转换为<br>
,以便它们在HTML显示中提供换行符。
答案 1 :(得分:8)
<br>
。您可能会看到这用于在html文档中间隔出元素,但这不是它的目的,因为布局间距应该通过CSS实现,例如margin
。这是一个不错的用例:
<p>This <br> is <br> some <br> text.</p>
为了便于阅读,我通常会使用换行符分解我的文本,因此我不希望在文档中呈现换行符。也就是说,<br>
标签是必要的。
html元素<pre>
是一个默认情况下使用CSS规则white-space: pre;
的元素,以便在该元素中呈现文档的空白。通常,无论文档中的空白量如何,都只会呈现单个空格。这种风格的一个很好的用途是代码块。如果我编写一个代码块,我会自然地按照我的意图对它进行空格处理,并且不需要特别注意在每一行周围包含<p>
标记(这不是语义)并且我不想丢弃我的代码<br>
也是。更糟糕的是,还有代码缩进! whitespace: pre
在这里很有意义。
<pre>
function foo() {
//etc
}
</pre>
根据您的PHP代码运行的平台,您需要使用\r
,\n\
或\r\n
两者呈现换行符。 PHP_EOL
会自动为您选择,因此这是最具活力的方法。
答案 2 :(得分:5)
将HTML换行符<br>
与实际文本换行符进行比较是没有意义的。 <br>
只是浏览器呈现网站的线页,而\n
和PHP_EOL
是实际的源代码换行符。
正如您自己提到的那样,PHP_EOL
无论平台如何都会有效,因此也优先于\n
。最初,\n
仅是UNIX上的标准换行符,而Macintosh使用\r
,Windows / DOS使用两者的组合:\r\n
。但是,使用PHP_EOL
时,您根本不必担心平台。
如今,大多数系统和编辑都足够宽容,可以接受您决定使用的任何换行符,但使用正确的一个显然是首选的,并且最容易通过PHP_EOL
实现,所以有真的没有理由不使用它。
答案 3 :(得分:2)
我必须在cron上运行脚本并将结果保存到日志文件中。但有时我在浏览器上运行脚本。所以我做了以下测试,以便使用正确的行结束char:
<?php
$eol = (isset($_SERVER['SHELL'])) ? PHP_EOL : "<br />";
echo "DISCOVER". $eol;
?>
答案 4 :(得分:0)
您可以使用Flavio的代码创建一个函数,无论您是在shell上还是在浏览器中运行它,它总是设置正确的换行符:
<?php
function nl($string) {
if(isset($_SERVER['SHELL'])) return preg_replace('/\<br(\s*)?\/?\>/i', PHP_EOL, $string);
return nl2br($string);
}
print nl("One\nTwo<br>Three\r\nFour<br />Five
Six" . PHP_EOL);
?>
答案 5 :(得分:0)
<br>
它是为HTML设计而创建的... <br>
在很多地方都无法使用,直到它支持的内容类型为<HTML>
内容类型为文本的邮件功能中的example1 ... <br>
将不起作用,而/n
将起作用。
更多示例,您将在其中看到不同的结果。
示例2
<html>
<body>
<script>
document.write("Hello \n World!");
</script>
</body>
</html>
document.write写入DOM时,您需要将
用于换行符。
Relevant MDN docs
example3
txt = "Hello \n World!" ;
alert(txt);
因为alert
函数要求向用户显示一条消息
它不同于其中带有HTML的弹出窗口
/n
在换行符的大多数编程语言中基本上很常见,并且可以在大多数平台中使用。 \n
和PHP_EOL
是实际的源代码换行符。
常量PHP_EOL通常应用于平台特定的输出。
主要用于文件输出。
实际上,除非在\n ←→ \r\n
二进制模式下使用,否则文件功能已经在Windows系统上转换了fopen(…, "wb")
。
对于文件输入,您应该首选\n
。虽然大多数网络协议(HTTP)应该使用\r\n,
,但这不能保证。
因此,最好分手\n
并手动删除所有可选的\r
:
示例
$lines = array_map("rtrim", explode("\n", $content));
更健壮和更简洁的选择是使用preg_split()和正则表达式:
$lines = preg_split("/\R/", $content);
\R
占位符检测到\r + \n
的任何组合。这样最安全,甚至可以用于经典MacOS ≤ 9
文本文件(在实践中很少见)。
请注意,旧的Mac使用\ r,这将是一个更好的解决方案:preg_replace('~\r\n?~', "\n", $str);
PHP_EOL
在写入日志文件等输出时应使用。
它将产生特定于您平台的换行符。
它是一个常量,用于保存服务器平台使用的换行符。如果是Windows,则为\ r \ n。在* nix上是\ n。您显然拥有Windows服务器。