【问题标题】:PHP Echo Line BreaksPHP 回显换行符
【发布时间】:2010-09-20 07:25:14
【问题描述】:

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

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

【问题讨论】:

  • 在下面我的回答中,您如何使用 php 的 echo 输出?显然,在网页中
    标签定义了一个换行符,所以我假设它的使用方式不同?

标签: php cross-platform newline eol line-breaks


【解决方案1】:

使用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");
    }
}

【讨论】:

  • 不错的主意,但我希望尽可能向后兼容。
  • 请注意,输出不一定发送到运行 PHP 的操作系统。
  • 此答案需要标记为正确答案。我开发了一个应用程序并在 Hostmonster.com 上对其进行了测试(他们运行 RedHat Linux),客户端将代码部署到 CentOS 机器上。在 dev "\n" 中按预期呈现换行符;在 CentOS 机器上它没有。一旦我将“\n”更改为 PHP_EOL,问题就消失了,代码按预期工作。经验教训:即使 prod OS 是 dev OS 的衍生版本,即使 "\n" 应该适用于所有 *nix 机器,如果绝对必须正确实现,则始终使用 PHP_EOL,永远不要 "\n"
  • 由于preg_match 未检测到行结束而来到这里的那些,将$ 替换为(?:\r\n|\r|\n|$)(其中?: 是非捕获正则表达式组)。
【解决方案2】:
  • \n 是 Linux/Unix 换行符。
  • \r 是经典的 Mac OS(非 OS X)换行符。 Mac OS X 使用上面的 unix \n
  • \r\n 是 Windows 换行符。

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

【讨论】:

  • 如果我使用 \r\n 它将在 Linux 和 Windows 中工作吗?另外,如果我这样做,它会在 Linux 中将 \r 输出为文本吗?
  • 目前无法访问 linux 进行检查,但如果您将其视为文本文件,我很确定 \r 在 linux 中无法正常显示。如果您需要查看它们的外观,应该很容易测试各种选项。
  • 不,它不会打印,为了最终的兼容性,使用 \r\n
  • 既然 Mac OS X 是 Unix,它使用 \n 吗?
  • @Imran - 好问题!我自己也想知道,但没有要测试的 Mac OS X。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

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

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

    From the PHP manual: "PHP_EOL The correct 'End Of Line' symbol for this platform. Available since PHP 4.3.10 and PHP 5.0.2".

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多