\ n与PHP_EOL对比?

时间:2014-01-27 05:15:34

标签: php newline nl2br

在大多数情况下,对于一个互动网站,当我们向网络客户端浏览器输出多行内容时,我认为<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之间的区别是什么?任何机构都可以列出各自的优缺点吗?

6 个答案:

答案 0 :(得分:30)

DOS,Unix和Mac(OS X和OS X之前的版本)都使用不同的字符或字符组合来表示“转到下一行。”

  • 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)

&LT峰; br&GT;

只有在分割文本时才会使用

<br>。您可能会看到这用于在html文档中间隔出元素,但这不是它的目的,因为布局间距应该通过CSS实现,例如margin。这是一个不错的用例:

<p>This <br> is <br> some <br> text.</p>

为了便于阅读,我通常会使用换行符分解我的文本,因此我不希望在文档中呈现换行符。也就是说,<br>标签是必要的。

CSS空白,&lt; pre&gt;

html元素<pre>是一个默认情况下使用CSS规则white-space: pre;的元素,以便在该元素中呈现文档的空白。通常,无论文档中的空白量如何,都只会呈现单个空格。这种风格的一个很好的用途是代码块。如果我编写一个代码块,我会自然地按照我的意图对它进行空格处理,并且不需要特别注意在每一行周围包含<p>标记(这不是语义)并且我不想丢弃我的代码<br>也是。更糟糕的是,还有代码缩进! whitespace: pre在这里很有意义。

<pre>
function foo() {
  //etc
}
</pre>

\ r,\ n,PHP_EOL

根据您的PHP代码运行的平台,您需要使用\r\n\\r\n两者呈现换行符。 PHP_EOL会自动为您选择,因此这是最具活力的方法。

答案 2 :(得分:5)

将HTML换行符<br>与实际文本换行符进行比较是没有意义的。 <br>只是浏览器呈现网站的线页,而\nPHP_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

在换行符的大多数编程语言中基本上很常见,并且可以在大多数平台中使用。 \nPHP_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服务器。