46

\n 和 \r 之间有什么区别(我知道它与操作系统有关),以及回显跨平台工作的换行符的最佳方法是什么?

编辑:作为对 Jarod 的回应,我将使用 ths 在 .txt 日志文件中回显换行符,但我确信将来我会使用它来将 HTML makup 回显到页面上。

4

4 回答 4

129

使用PHP_EOL常量,它会自动设置为运行 PHP 脚本的操作系统的正确换行符。

请注意,这个常量是从 PHP 5.0.2 开始声明的。

<?php
    echo "Line 1" . PHP_EOL . "Line 2";
?>

为了向后兼容:

if (!defined('PHP_EOL')) {
    switch (strtoupper(substr(PHP_OS, 0, 3))) {
        // Windows
        case 'WIN':
            define('PHP_EOL', "\r\n");
            break;

        // Mac
        case 'DAR':
            define('PHP_EOL', "\r");
            break;

        // Unix
        default:
            define('PHP_EOL', "\n");
    }
}
于 2008-11-01T04:25:44.447 回答
48
  • \n是 Linux/Unix 换行符。
  • \r是经典的 Mac OS(非 OS X)换行符。Mac OS X 使用上面的 unix \n
  • \r\n是 Windows 换行符。

我通常只\n在我们的 Linux 系统上使用,而且大多数 Windows 应用程序都可以处理它。

于 2008-11-01T04:04:13.307 回答
31

Jarod 的答案包含在各种操作系统上正确使用 \r \n 。这里有一些历史:

  • \r,或十进制代码为 13 的 ASCII 字符,在“回车”之后命名为 CR。
  • \n 或十进制代码为 10 的 ASCII 字符被命名为“换行符”,或“换行符”后的 LF。

术语“回车”和“换行”可以追溯到使用电传打字机代替带有监视器和键盘的终端时。对于电传打字机或打字机,“回车”意味着移动光标并返回到文本的第一列,而“换行”意味着旋转滚轮以进入下一行。在那个时候,这种区别是有道理的。今天,表示一行文本结尾的 \n、\r、\r\n 组合完全是任意的。

于 2008-11-01T04:23:43.500 回答
7

PHP4 上的 PHP_EOL 不需要向后兼容。

需要更正 Moore 关于恒定 PHP_EOL 可用性的声明:“......自 PHP 5.0.2 起声明。”。

不,它从 PHP 4.3.10 开始就存在了。任何仍在运行比这更少的东西的人无论如何都不应该从事商业活动。到今天为止,没有人应该使用低于 PHP 5 的任何东西!

来自 PHP 手册:“PHP_EOL 此平台的正确‘行尾’符号。自 PHP 4.3.10 和 PHP 5.0.2 起可用”。

于 2012-04-13T12:59:32.730 回答