42

In most cases, as for one interactive website, when we output multiple lines of contents to web client browser, in my opinion, <BR /> is much more preferable than other two: \n or PHP_EOL.

Else, we need to use "<pre></pre>" to wrap the output content or use nl2br() to insert <BR /> before \n so as the multiple line mark can take effect in HTML. Like following example.

$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 />");
}

Some people believe PHP_EOL is useful when writing data to a file, example a log file. It will create line breaks no matter whatever your platform.

Then, my question is when we use \n? What's the difference between \n and PHP_EOL, and <BR />? Could any body have a big list of each of their pros and cons?

4

7 回答 7

43

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 显示中提供换行符。

于 2014-01-27T05:27:05.777 回答
11

<br>

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

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

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

CSS 空格,<pre>

html 元素<pre>是一个默认情况下使用 CSS 规则的元素,white-space: pre;以便在该元素中呈现文档的空白。通常,无论文档中有多少空格,都只会呈现一个空格。这种风格的一个很好的用途是用于代码块。如果我编写一个代码块,我自然会按照我的意图将它隔开,并且不特别关心<p>在每一行周围包装一个标签(无论如何这不是语义),我也不想乱扔我的代码<br>。更糟糕的是,还有代码缩进!whitespace: pre这里很有意义。

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

\r, \n, PHP_EOL

根据运行 php 代码的平台,您需要使用 , 或两者来\r呈现\n\换行符\r\nPHP_EOL会自动为你选择,所以它是最有活力的方法。

于 2014-01-27T05:21:11.787 回答
6

<br>将 HTML 换行符与实际的文本换行符进行比较是没有意义的。<br>只是浏览器呈现网站的行页,而\n实际上PHP_EOL是源代码换行符。

正如您自己提到PHP_EOL的,无论平台如何都可以工作,因此也优于\n. 最初,\n只是 UNIX 上的标准换行符,而 Macintosh 使用\r和 Windows/DOS 使用两者的组合:\r\n. 但是,在使用PHP_EOL时,您根本不必担心平台。

如今,大多数系统和编辑器都足够宽容,可以接受您决定使用的任何换行符,但使用正确的换行符显然是首选并且最容易实现PHP_EOL,因此没有理由不使用它。

于 2014-01-27T05:21:19.403 回答
3

我必须在 cron 上运行脚本并将结果保存到日志文件中。但有时我会在浏览器上运行脚本。所以我做了以下测试以使用正确的行尾字符:

<?php
$eol = (isset($_SERVER['SHELL'])) ? PHP_EOL : "<br />";
echo "DISCOVER". $eol;
?>
于 2017-10-02T13:10:58.560 回答
1

非常简单的答案:

  • 使用'<br/>'.PHP_EOL 内部 <body>内容,否则不会对输出页面产生影响;
  • PHP_EOL在每行的末尾使用内容 <body>里面<script>内容body
  • \在你需要输出的中间使用string分隔线。

规则将输出一个 html 页面,该页面向用户显示其新行,同时对于尝试检查您的 html 代码的开发人员来说是可读的。

于 2021-11-17T13:40:12.577 回答
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);
?>
于 2017-11-07T15:45:35.573 回答
0

<br>

它是为 HTML 设计而创建的......<br>在它支持内容类型之前不会在很多地方工作<HTML>

内容类型为文本的邮件函数中的 example1...<br>不起作用但/n会起作用。

更多示例,您将看到不同的结果。

示例 2

<html>
<body>
<script>
document.write("Hello \n World!");
</script>
 </body>
</html>

当 document.write 写入 DOM 时,您需要使用
换行符。 相关 MDN 文档

示例3

txt = "Hello \n World!" ; 
alert(txt);

因为alert函数要求向用户显示一条消息,它与其中包含 HTML 的弹出窗口不同

/n

在大多数编程语言中基本上是常见的换行符,它可以在大多数平台上工作。\n并且PHP_EOL是实际的源代码换行符。

常量 PHP_EOL 通常应该用于特定于平台的输出。

主要用于文件输出。实际上,\n ←→ \r\n除非在fopen(…, "wb")二进制模式下使用,否则文件函数已经在 Windows 系统上转换。但是,对于文件输入,您应该更喜欢\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 服务器。

于 2019-02-20T09:08:47.537 回答