46

\n と \r の違いは何ですか (OS と関係があることはわかっています)。クロスプラットフォームで機能する改行をエコーする最良の方法は何ですか?

編集: Jarod に応えて、.txt ログ ファイルに改行をエコーするために ths を使用しますが、HTML マクロをページにエコーするなどの目的で将来使用することは確実です。

4

4 に答える 4

129

PHP_EOLPHP スクリプトが実行されているオペレーティング システムの正しい改行に自動的に設定される定数を使用します。

この定数は 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
  • \nLinux/Unix の改行です。
  • \r古典的な Mac OS (OS X 以外) の改行です。Mac OS X は上記の unix を使用します\n
  • \r\nWindows の改行です。

私は通常\n、Linux システムで使用するだけで、ほとんどの Windows アプリは問題なく処理できます。

于 2008-11-01T04:04:13.307 に答える
31

Jarod の回答には、さまざまな OS での \r \n の正しい使用法が含まれています。ここにいくつかの歴史があります:

  • \r、または 10 進コード 13 の ASCII 文字は、「キャリッジ リターン」にちなんで CR という名前が付けられます。
  • \n、または 10 進コード 10 の ASCII 文字は、「改行」または「改行」の後に LF という名前が付けられます。

「キャリッジ リターン」と「ライン フィード」という用語は、モニターとキーボードを備えた端末の代わりにテレタイプが使用されていた時代にさかのぼります。テレタイプまたはタイプライターに関して、「キャリッジ リターン」はカーソルを移動してテキストの最初の列に戻ることを意味し、「ライン フィード」はローラーを回転させて次の行に移動することを意味しました。その時点で、区別は理にかなっています。現在、テキスト行の終わりを表す \n、\r、\r\n の組み合わせは完全に恣意的です。

于 2008-11-01T04:23:43.500 に答える
7

PHP4のPHP_EOLには下位互換性は必要ありません。

PHP_EOLの一定の可用性に関するMooreのステートメントを修正する必要があります:「...はPHP5.0.2以降で宣言されています。」

いいえ、PHP4.3.10から使用されています。それよりも少ないものをまだ実行している人は、とにかくビジネスに参加するべきではありません。今日の時点で、PHP5未満のものを使用することはできません。

PHPマニュアルから:「PHP_EOLこのプラットフォームの正しい「行末」記号。PHP4.3.10およびPHP5.0.2以降で使用可能」。

于 2012-04-13T12:59:32.730 に答える