Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】nl2br()関数の使い方

nl2br関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

nl2br関数は、指定された文字列内の改行文字をHTMLの<br>タグに変換して返す関数です。この関数は、ユーザーがテキストエリアに入力した改行を含む文字列をウェブページ上で表示する際に特に役立ちます。HTMLは通常、連続する空白文字や改行文字を一つの空白として扱ってしまうため、入力された改行をそのままの形でブラウザに表示させるには、<br>タグへの変換が必要になります。

具体的な動作として、\n(ラインフィード)や\r\n(キャリッジリターンとラインフィード)といった改行コードが検出されると、それらをHTMLの<br>タグに置き換えます。これにより、テキストエリアで改行された部分が、ブラウザ上でも視覚的に改行されて表示されるようになります。

この関数は、変換したい文字列を唯一の必須引数として受け取ります。PHP 8.0.0以降、オプションの第二引数としてuse_xhtmlがありましたが、PHP 8.1.0以降ではこの引数は無視され、常にHTML5互換の<br>タグが生成されるようになりました。したがって、現在のPHP環境では、単に変換対象の文字列を引数として渡すだけで利用できます。

例えば、ユーザーが「こんにちは\n世界」と入力した場合、nl2br関数を適用すると「こんにちは<br>世界」という文字列が得られ、これがブラウザで表示されると「こんにちは」の後に改行が入り「世界」と表示されます。このように、プレーンテキストの改行をウェブページで正しく表現するための基本的なツールとして広く利用されています。

構文(syntax)

1<?php
2$original_string = "これは\n改行を含む\nテキストです。";
3$converted_string = nl2br($original_string);
4echo $converted_string;
5?>

引数(parameters)

string $string, bool $use_xhtml = false

  • string $string: 改行コード(\n)を<br>タグに置換する対象の文字列
  • bool $use_xhtml = false: XHTML互換の<br />タグを使用するかどうかを示す真偽値 (trueでXHTML互換)

戻り値(return)

string

文字列中の改行文字(\n)をHTMLの改行タグ(<br />)に変換した新しい文字列を返します。

サンプルコード

PHP nl2br関数で改行をHTMLタグに変換する

1<?php
2
3// nl2br関数の基本的な使い方を示すサンプルコードです。
4// この関数は、文字列内の改行文字 (\n, \r\nなど) をHTMLの<br>タグまたは<br />タグに変換します。
5
6// 変換元の文字列を定義します。この文字列には改行文字が含まれています。
7$originalText = "こんにちは、PHPの世界へようこそ。\n"
8              . "nl2br関数は、改行をHTMLの改行タグに変換する際に便利です。\n"
9              . "例えば、ユーザーが入力したテキストをWebページに表示する際に使われます。";
10
11// nl2br関数を使用して、文字列内の改行をHTML5互換の <br> タグに変換します。
12// 第二引数を省略するかfalseにすると、この形式になります。
13$html5ConvertedText = nl2br($originalText);
14
15// nl2br関数を使用して、文字列内の改行をXHTML互換の <br /> タグに変換します。
16// 第二引数をtrueに設定すると、この形式になります。
17$xhtmlConvertedText = nl2br($originalText, true);
18
19// 元の文字列と変換後の文字列を出力し、その違いを確認します。
20// PHP_EOLは現在のOSの改行文字を表す定数です。
21echo "--- 元の文字列 ---" . PHP_EOL;
22echo $originalText . PHP_EOL;
23echo PHP_EOL; // 空行を出力して視認性を高めます
24
25echo "--- nl2brでHTML5互換の <br> に変換後 ---" . PHP_EOL;
26echo $html5ConvertedText . PHP_EOL;
27echo PHP_EOL;
28
29echo "--- nl2brでXHTML互換の <br /> に変換後 ---" . PHP_EOL;
30echo $xhtmlConvertedText . PHP_EOL;
31
32// このスクリプトをWebブラウザで実行すると、<br>タグが実際に改行として表示されるのを確認できます。
33// コマンドラインで実行すると、<br>タグがそのまま文字列として表示されますが、
34// その文字列に<br>タグが含まれていることを確認できます。
35
36?>

PHPのnl2br関数は、文字列内に含まれる改行文字(\n\r\nなど)をHTMLの<br>タグまたは<br />タグに変換する関数です。この関数は、ユーザーがテキストエリアに入力したような改行を含むプレーンテキストを、Webページ上で視覚的な改行として表示したい場合に特に便利です。

この関数は2つの引数を取ります。最初の引数$stringには、変換したい元の文字列を指定します。2番目の引数$use_xhtmlはオプションの真偽値で、デフォルトはfalseです。falseを指定するか省略した場合、改行はHTML5標準の<br>タグに変換されます。trueを指定すると、XHTML互換の<br />タグに変換されます。関数は変換後の新しい文字列を返します。

サンプルコードでは、改行を含む$originalTextを定義し、まずnl2br($originalText)のように第二引数を省略してHTML5互換の<br>に変換しています。次に、nl2br($originalText, true)trueを指定してXHTML互換の<br />に変換する例を示しています。それぞれの変換結果はechoで出力されており、Webブラウザでこのスクリプトを実行すると、<br>タグが実際に改行として表示されることを確認できます。コマンドラインで実行した場合も、出力される文字列の中に<br>タグが含まれていることが確認できます。

nl2br関数は、文字列内の改行をHTMLの<br>タグに変換する際に利用します。Webページでテキストの改行を表現したい場合に特に便利ですが、コマンドライン出力では<br>タグは単なる文字列として表示されるため注意が必要です。第二引数をtrueにするとXHTML互換の<br />タグが生成され、Webページのドキュメントタイプに合わせて使い分けます。この関数は改行の変換のみを行い、文字列に含まれるHTML特殊文字(例: <>)は変換しません。ユーザーからの入力など、信頼できない文字列をWebページに表示する際には、XSS(クロスサイトスクリプティング)などのセキュリティリスクを避けるため、htmlspecialchars関数などで別途エスケープ処理を行うことを忘れないでください。

PHP nl2br「効かない」の理由と使い方

1<?php
2
3/**
4 * nl2br関数の動作をデモンストレーションします。
5 *
6 * この関数は、PHP 8 の `nl2br` 関数が文字列中の改行文字 (`\n`) をHTMLの`<br>`タグに変換する様子を示します。
7 * 特に「nl2brが効かない」と感じる一般的な状況(改行がない、またはHTMLとして処理されていない)
8 * と、正しく機能するケースを比較して解説します。
9 *
10 * 出力はWebブラウザで表示されることを想定しており、XSS (クロスサイトスクリプティング) 対策として
11 * `htmlspecialchars` 関数を適切に適用しています。
12 */
13function demonstrateNl2brFunction(): void
14{
15    // 改行を含まない文字列の例
16    $textWithoutNewline = "これは改行を含まないテキストです。nl2br関数を適用しても見た目は変わりません。";
17
18    // 改行を含む文字列の例
19    $textWithNewline = "こんにちは!\nPHPのnl2br関数について学習しましょう。\n\nこのテキストは複数の行に分かれています。\nこれは最終行です。";
20
21    // HTMLの出力開始
22    echo '<!DOCTYPE html>';
23    echo '<html lang="ja">';
24    echo '<head>';
25    echo '<meta charset="UTF-8">';
26    echo '<meta name="viewport" content="width=device-width, initial-scale=1.0">';
27    echo '<title>nl2br関数デモンストレーション</title>';
28    echo '<style>
29        body { font-family: sans-serif; margin: 20px; line-height: 1.6; }
30        .code-block { background-color: #f0f0f0; padding: 15px; border: 1px solid #ddd; margin-bottom: 20px; white-space: pre-wrap; word-wrap: break-word; }
31        .explanation { margin-bottom: 15px; }
32        .scenario-title { font-weight: bold; margin-top: 25px; margin-bottom: 10px; border-bottom: 1px solid #eee; padding-bottom: 5px; }
33    </style>';
34    echo '</head>';
35    echo '<body>';
36
37    echo '<p class="scenario-title">nl2br関数の動作デモンストレーション</p>';
38    echo '<p class="explanation">このページは、<code>nl2br</code>関数が文字列中の改行文字 (<code>\\n</code>) をHTMLの<code>&lt;br&gt;</code>タグに変換する方法を示します。</p>';
39    echo '<p class="explanation">特に「nl2brが効かない」と感じる状況とその解決策に焦点を当てています。</p>';
40
41    // シナリオ1: 改行を含まない文字列への適用
42    echo '<p class="scenario-title">シナリオ1: 改行を含まない文字列への適用</p>';
43    echo '<p class="explanation">元のテキスト: <code>' . htmlspecialchars($textWithoutNewline) . '</code></p>';
44    echo '<p class="explanation"><code>nl2br()</code> 適用後の結果 (改行がないため、見た目に変化はありません):</p>';
45    echo '<div class="code-block">' . nl2br(htmlspecialchars($textWithoutNewline)) . '</div>';
46    echo '<p class="explanation"><b>解説:</b> <code>nl2br</code>関数は、既に存在する改行文字を変換します。入力文字列に改行が全く含まれていない場合、何も変換されないため、「効かない」ように見えます。</p>';
47
48    // シナリオ2: 改行を含む文字列
49    echo '<p class="scenario-title">シナリオ2: 改行を含む文字列</p>';
50    echo '<p class="explanation">元のテキスト (内部的に <code>\\n</code> で改行されています):</p>';
51    echo '<div class="code-block">' . htmlspecialchars($textWithNewline) . '</div>';
52
53    // シナリオ2A: nl2brなしで出力(「効かない」と感じる一般的なケース)
54    echo '<p class="scenario-title">シナリオ2A: <code>nl2br()</code> を使わずにそのまま出力した場合</p>';
55    echo '<p class="explanation">HTMLは改行文字を通常の空白として扱うため、ブラウザ上では改行されずに表示されます。</p>';
56    echo '<div class="code-block">' . htmlspecialchars($textWithNewline) . '</div>';
57    echo '<p class="explanation"><b>解説:</b> HTMLでは、改行文字 (<code>\\n</code>) は単なる空白として扱われます。そのため、<code>nl2br</code>関数を使わずに文字列を直接出力すると、元の文字列に改行があっても、ブラウザ上では一行で表示され「nl2brが効かない」と誤解されることがあります。</p>';
58
59    // シナリオ2B: nl2brありで出力(正しい使い方)
60    echo '<p class="scenario-title">シナリオ2B: <code>nl2br()</code> を適用して出力した場合</p>';
61    echo '<p class="explanation">改行文字がHTMLの<code>&lt;br&gt;</code>タグに変換され、ブラウザで正しく改行されます。</p>';
62    echo '<div class="code-block">' . nl2br(htmlspecialchars($textWithNewline)) . '</div>';
63    echo '<p class="explanation"><b>解説:</b> <code>nl2br</code>関数を使うことで、文字列中の改行文字がHTMLの<code>&lt;br&gt;</code>タグに変換されます。これにより、ブラウザは改行を正しく解釈し、表示上で改行されます。セキュリティ対策として、<code>nl2br</code>適用後に<code>htmlspecialchars</code>を適用することが推奨されます。</p>';
64
65    echo '</body>';
66    echo '</html>';
67}
68
69// 関数の実行
70demonstrateNl2brFunction();
71

PHPのnl2br関数は、文字列に含まれる改行文字 (\n) をHTMLの<br>タグに変換するために使用されます。これにより、ユーザーがテキストエリアなどに入力した改行を含む文字列をWebブラウザで表示する際に、元の改行がそのまま反映されるようになります。

この関数の引数は、変換対象のstring(文字列)と、オプションでXHTML形式 (<br />) を使用するかを指定するbool $use_xhtmlです。変換後の文字列が戻り値として返されます。

サンプルコードでは、「nl2brが効かない」と感じる一般的な状況と、その正しい使い方をデモンストレーションしています。 まず、元の文字列に改行が全く含まれていない場合(シナリオ1)は、nl2brを適用しても見た目に変化はありません。これは変換すべき改行文字がないためです。 次に、改行を含む文字列をnl2br関数を使わずに直接HTMLに出力した場合(シナリオ2A)は、HTMLの仕様により改行文字 (\n) が単なる空白として扱われるため、ブラウザ上では一行で表示され改行されません。これが「nl2brが効かない」と誤解される主な原因の一つです。 正しく利用するには、改行を含む文字列にnl2br関数を適用します(シナリオ2B)。これにより改行文字が<br>タグに変換され、ブラウザ上で意図した通りに改行されて表示されます。セキュリティの観点から、ユーザーが入力した文字列などを扱う場合は、nl2brを適用した後にhtmlspecialchars関数でHTMLエスケープを行うことが推奨されます。

nl2br関数は、文字列中の改行文字(\n)をHTMLの<br>タグに変換する機能です。元の文字列に改行が全く含まれていない場合や、nl2br関数を使わずにそのままHTMLに出力した場合は、ブラウザで改行されず「効かない」と感じることがあります。HTMLでは改行文字は単なる空白として扱われるため、適切なHTMLタグによる改行が必要です。

安全にnl2brを利用するには、セキュリティの観点からユーザー入力値を処理する際、まずhtmlspecialchars関数で悪意のあるHTMLタグなどをエスケープし、その後にnl2br関数を適用するようにしてください。この順序で処理することで、XSS(クロスサイトスクリプティング)などの脆弱性を防ぎつつ、nl2brで変換された<br>タグがエスケープされずにブラウザで正しく改行として表示されます。

PHP nl2brの逆変換をする

1<?php
2
3/**
4 * nl2br関数の逆の操作を行い、HTMLの<br>タグを改行文字に変換します。
5 *
6 * nl2br関数は改行文字(\n)を<br>タグに変換しますが、
7 * この関数はその逆で、様々な形式の<br>タグ (例: <br>, <br/>, <br />) を
8 * 改行文字(\n)に変換します。
9 *
10 * @param string $string <br>タグを含む入力文字列。
11 * @return string <br>タグが改行文字に変換された文字列。
12 */
13function br2nl(string $string): string
14{
15    // 正規表現を使って、<br>, <br/>, <br /> などのタグを改行文字(\n)に置換します。
16    // i: 大文字小文字を区別せずにマッチさせます (例: <BR>, <Br /> も対象)。
17    // \s*: <br>と/>の間にある任意の空白文字にマッチします。
18    // /?: スラッシュが0回または1回出現することにマッチします (自己終了タグに対応)。
19    return preg_replace('/<br\s*\/?>/i', "\n", $string);
20}
21
22// --- サンプルコードの実行例 ---
23
24// 元の文字列(改行文字を含む)
25$originalString = "こんにちは\nPHPの世界へ\nようこそ!";
26echo "--- 元の文字列 ---\n";
27echo $originalString . "\n";
28
29// nl2br関数で改行文字を<br>タグに変換
30// PHP 8ではnl2brの第2引数use_xhtmlのデフォルトがfalseなので、<br>が出力されます。
31$brConvertedString = nl2br($originalString);
32echo "\n--- nl2brで変換後 (HTML形式) ---\n";
33echo $brConvertedString . "\n";
34
35// br2nl関数で<br>タグを改行文字に戻す
36$nlReconvertedString = br2nl($brConvertedString);
37echo "\n--- br2nlで元に戻した後 ---\n";
38echo $nlReconvertedString . "\n";
39
40// 元の文字列と再変換後の文字列が完全に一致するか確認
41if ($originalString === $nlReconvertedString) {
42    echo "\n元の文字列と再変換後の文字列は一致しました。";
43} else {
44    echo "\n元の文字列と再変換後の文字列は一致しませんでした。";
45}
46
47?>

このサンプルコードは、PHPの標準関数であるnl2brと、その逆の操作を行うカスタム関数br2nlの利用例を示しています。

PHPのnl2br関数は、文字列内の改行文字(\nなど)をHTMLの<br>タグに変換する目的で使用されます。これは、データベースから取得したテキストなどをウェブページに表示する際に、改行を適切に表現するために役立ちます。引数string $stringには変換したい文字列を渡し、bool $use_xhtmlはPHP 8ではデフォルトでfalseとなっており、<br>タグを出力します。戻り値は<br>タグに変換された文字列です。

一方、サンプルコードで定義されているbr2nl関数は、nl2br関数とは反対に、HTMLの<br>タグを改行文字に変換する役割を持ちます。この関数は引数string $stringとして、<br>タグを含む文字列を受け取ります。関数内部では、preg_replaceという正規表現を利用した置換関数を使用しており、<br>, <br/>, <br />といった様々な形式の<br>タグを、大文字小文字を区別せず(iオプション)に改行文字\nに置換しています。戻り値は、<br>タグが改行文字に変換された後の文字列です。

このbr2nl関数は、例えばnl2brでHTML形式に変換され保存されたテキストを、再びプレーンテキストとして編集したり表示したりする際に非常に有用です。サンプルコードの実行例では、まず元の文字列をnl2brでHTML形式に変換し、次にbr2nlでそれを元の改行文字に戻す一連の流れを示しています。最終的に、変換と再変換を経た文字列が元の文字列と一致するかを確認することで、br2nl関数が期待通りに動作することを示しています。

nl2br関数は改行文字をHTMLの<br>タグに変換しますが、サンプルコードのbr2nl関数はその逆で、様々な形式の<br>タグを改行文字に戻すカスタム関数です。br2nl関数は正規表現を使用しており、<br>, <br/>, <br />といった多様な形式や、大文字小文字の区別なくタグを改行文字に置換できます。PHP 8のnl2brは、第二引数を省略するとデフォルトでXHTML形式ではない<br>を出力する点も確認しておきましょう。

重要な注意点として、このbr2nl関数は特定のタグを置換するのみであり、ユーザーからの入力値をウェブページに表示する際には、セキュリティ対策としてhtmlspecialcharsなどのエスケープ処理を必ず併用してください。これにより、意図しないスクリプトの実行やHTMLの崩れを防ぎ、アプリケーションの安全性を高めることができます。

関連コンテンツ

関連プログラミング言語