HOWTO · PHP

PHP で改行を作成する

この記事では、PHP で改行文字を作成する方法を紹介します。

このページの内容

PHP で改行を作るときは、出力を読む側に合わせて表現を選びます。テキストに改行を入れるには、二重引用符で囲んだ文字列内で \n を使い、現在のプラットフォームの改行シーケンスに合わせるには PHP_EOL を使います。ブラウザーで見える改行には、<br> などの HTML を出力します。HTML ソースに改行文字を入れただけでは、通常、表示上の改行にはなりません。ブラウザーは HTML を解釈しますが、端末やテキストファイルの読み取り側は文字を扱うため、これらの方法は互いに置き換えられません。

出力形式に合わせて改行を選ぶ

CLI のメッセージ、ログ、プレーンテキストファイルでは、文字列に改行文字を入れるか、ファイルをプラットフォームの慣例に合わせるなら PHP_EOL を使います。HTML の応答では、ブラウザーが解釈できるマークアップを使います。PHP を実行している OS だけで決めず、出力を受け取る側に合わせて選んでください。出力がテキストとしても HTML としても読まれる可能性がある場合は、1つの文字列にマークアップとテキスト用の改行を混在させず、用途ごとに形式を分けます。

PHP の文字列で \n を使う

PHP の二重引用符で囲んだ文字列では、\n はラインフィードを表します。単一引用符で囲んだ文字列では、\n は改行として解釈されず、バックスラッシュを含む並びのまま残ります(単一引用符内での PHP のエスケープ規則は限定的です)。このエスケープを PHP に解釈させるには、二重引用符を使います。ラインフィードを2つ続けると、テキストの行と行の間に空行ができます。

次の例と出力欄の表示文字列は、バイト単位の一致を保つため英語のままです。例では「Hello, PHP!」に続いて「Welcome back.」を表示します。

次の例を実行します。

<?php
$message = "Hello, PHP!\nWelcome back.";
echo $message, "\n";
?>

期待される出力:

次の出力欄にある表示文字列も、バイト単位の一致を保つため英語のままです。

Hello, PHP!
Welcome back.

この方法は、端末への出力やテキスト内容に適しています。ファイルに書き込む場合、文字列のバイト列はそのまま書き込まれるため、ファイルを読むプログラムが期待する改行規則を選んでください。

プラットフォーム標準のテキストには PHP_EOL を使う

PHP_EOL には、PHP が動作しているプラットフォームの改行シーケンスが入っています。たとえば、テキスト行の間に "First" . PHP_EOL . "Second" のように連結します。CLI の出力や、その環境で使うテキストファイルに便利です。HTML の表示上の改行を作るものではありません。ブラウザーは段落を表示するとき、ソース内の空白をまとめて表示することがあります。また、特定の交換形式向けのファイルでは固定の改行コードが必要な場合があります。その場合は、実行環境の改行を使うのではなく、その形式で指定された文字を使ってください。

HTML の改行には <br> を使う

HTML を生成するとき、<br> は HTML の改行要素です。たとえば、PHP から "First line<br>Second line" を出力すると、HTML レンダラーはテキストを別々の行に表示します。HTML ソース内の改行文字は一般に空白として扱われ、表示上の改行が保証されるわけではありません。一方、端末に <br> を出力すると、カーソルは次の行へ移動せず、マークアップが文字として表示されます。信頼できない値を HTML に挿入する前にエスケープしてください。改行要素を加えても、周囲の内容が安全になるわけではありません。

\r\n と空行を理解する

\r\n は、キャリッジリターンの後にラインフィードが続く並びです。多くの Windows テキストファイルで慣例的に使われる改行コードです。PHP の二重引用符で囲んだ文字列では、この2つのエスケープがそれぞれの制御文字になります。受け取り側の形式で CRLF が明示的に必要な場合にこの並びを使います。それ以外では、プラットフォーム標準のテキストには PHP_EOL が便利で、ラインフィードを指定する形式では \n がよく使われます。空行は、"First\n\nSecond" のように改行シーケンスをもう1つ加えて作ります。キャリッジリターンは PHP に出力位置をリセットさせる命令ではなく、その表示効果が出力先に左右される文字です。

よくある間違いと簡単な確認方法

  • \n が文字としてそのまま表示される場合は、文字列が単一引用符で囲まれていないか確認します。二重引用符を使うか、別の方法で改行を作ります。
  • ブラウザーでテキストが1行に表示される場合は、レンダリング後の HTML を確認します。ソース内の空白に頼らず、<br> または適切な CSS を使います。
  • 端末や保存したプレーンテキストファイルに <br> が表示される場合、出力はテキストとして扱われています。代わりに \n または PHP_EOL を使います。
  • 別のプログラムがテキストファイルを拒否する場合は、そのプログラムが必要とする改行規則を確認します。\n、\r\n、PHP_EOL では異なるバイト列になることがあります。

出力を読む側に合わせて表現を選びます。テキストのラインフィードには PHP の文字列構文、標準的なテキストファイルには PHP_EOL、固定のファイル形式には指定された改行シーケンス、ブラウザーで表示する HTML には <br> を使います。