web-dev-qa-db-ja.com

PHPエコー改行

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

編集: Jarodに応答して、thsを使用して.txtログファイルの改行をエコーし​​ますが、将来的にはHTML makupをページにエコーします。

42
PHLAK
  • \nはLinux/Unixの改行です。
  • \rは、古典的なMac OS(非OS X)の改行です。 Mac OS Xは上記のUnix \n
  • \r\nはWindowsの改行です。

私は通常、\n私たちのLinuxシステムとほとんどのWindowsアプリでは、とにかく大丈夫です。

45
Jarod Elliott

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

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

  • \ r、またはASCII 10進コード13の文字は、「復帰」の後にCRという名前が付けられます。
  • \ n、または10進コード10のASCII文字は、「改行」、またはLF「改行」の後に名前が付けられます。

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

31

PHP4上のPHP_EOLには後方互換性は必要ありません。

一定のPHP_EOLの可用性に関するムーアの声明を修正する必要があります:「...はPHP 5.0.2以降で宣言されています。」.

いいえ、PHP 4.3.10以降です。まだそれ以下の何かを実行している人は、とにかくビジネスにいるべきではありません。今日の時点で、PHP 5未満のものを使用することはできません。

PHPマニュアルから: "PHP_EOLこのプラットフォームの正しい 'End Of Line'シンボル。PHP 4.3.10およびPHP 5.0以降で利用可能.2 "。

7
Chris Kunze