nl2br()で改行を表示!使い方と注意点をわかりやすく解説

PHPでWebアプリケーションを開発していると、ユーザーが入力したテキストをそのままブラウザに表示する場面がよくあります。
しかし、テキストエリアなどで入力された改行は、HTMLではそのまま反映されません。
例えば、お問い合わせフォームやコメント欄で改行を含むメッセージを送信しても、ブラウザ上では改行が無視されて1行で表示されてしまいます。
そこで便利なのが、PHPのnl2br()関数です。
この記事では、PHP初心者でもすぐに使える「改行コードをHTMLの改行タグに変換する方法」を丁寧に解説していきます。
PHPで改行をHTMLに反映する方法は?
テキスト内の改行をブラウザ上でも表示するには、nl2br()関数を使うのが最もシンプルな方法です。
nl2br()は、文字列中の改行コード(\n)を見つけて、その直前にHTMLの<br />タグを挿入してくれます。
基本的な使い方は、このようになります。
<?php
$text = "こんにちは。\nお元気ですか?\n今日はいい天気ですね。";
echo nl2br($text);
?>
出力結果はこちらです。
こんにちは。<br />
お元気ですか?<br />
今日はいい天気ですね。
これだけで、改行コードがHTMLの改行タグに変換され、ブラウザ上でも正しく改行が反映されます。
nl2br()関数はPHPの組み込み関数なので、特別なライブラリを追加する必要もなく、手軽に利用できます。
詳細は公式マニュアル(PHP: nl2br – Manual)も確認すると安心です。
nl2brの詳しい使い方
こちらのセクションでは、nl2br()関数の詳しい使い方を説明していきます。
まず、使用できる引数はこちらです。
第1引数:変換したい文字列
第2引数:XHTML準拠の改行タグを使用するかどうか(true / false)
第2引数はオプションで、出力する改行タグの形式を制御できます。
それでは、実際にコードを書きながら説明します。
デフォルトの動作(XHTML準拠)
第2引数を省略した場合、デフォルトではtrueが適用され、XHTML準拠の<br />タグが出力されます。
<?php
$text = "1行目\n2行目";
echo nl2br($text);
// 出力:1行目<br />
// 2行目
?>
<br>タグで出力する
第2引数にfalseを指定すると、XHTML準拠ではない<br>タグが出力されます。
HTML5ではこちらの記法が一般的なので、HTML5で開発している場合はfalseを指定するのがおすすめです。
<?php
$text = "1行目\n2行目";
echo nl2br($text, false);
// 出力:1行目<br>
// 2行目
?>
- 第2引数が
true(デフォルト):<br />を出力 - 第2引数が
false:<br>を出力
プロジェクトのHTMLバージョンに合わせて、適切な形式を選びましょう。
nl2brのよくある実装例
実際によくある場面を想定し、いくつかの実装例を紹介します。
お問い合わせフォームの入力内容を表示する
<?php
$message = "お世話になっております。\n\n先日の件について確認させてください。\nよろしくお願いいたします。";
echo nl2br(htmlspecialchars($message, ENT_QUOTES, 'UTF-8'));
?>
ユーザーの入力値を表示する際は、必ずhtmlspecialchars()と併用しましょう。
XSS(クロスサイトスクリプティング)対策として、HTMLタグのエスケープ処理を行うことがセキュリティ上とても重要です。
データベースから取得したテキストを表示する
データベースに保存された改行付きテキストを画面に表示する場合にも、nl2br()が活躍します。
<?php
// データベースから取得した値を想定
$comment = "とても良い商品でした。\nまたリピートしたいです。\nありがとうございました!";
echo '<p>' . nl2br(htmlspecialchars($comment, ENT_QUOTES, 'UTF-8')) . '</p>';
?>
改行コードの種類に関わらず変換される
OSによって改行コードの種類は異なりますが、nl2br()は以下のすべてに対応しています。
\n(LF):Unix / Linux / Mac
\r\n(CRLF):Windows
\r(CR):古いMac
どの環境から送信されたテキストでも、正しく改行タグに変換してくれるので安心です。
nl2brを使うときの注意点
nl2br()は便利な関数ですが、初心者がハマりやすい注意点もあります。
- セキュリティ対策として
htmlspecialchars()と併用する
ユーザーの入力値をそのままnl2br()に渡すと、悪意のあるスクリプトが実行される可能性があります。必ずhtmlspecialchars()でエスケープしてから使いましょう。 htmlspecialchars()を先に実行する
順番を間違えると、nl2br()が挿入した<br>タグまでエスケープされてしまいます。正しい順番は「htmlspecialchars → nl2br」です。
正しい順番の例はこちらです。
<?php
$input = "ユーザーの入力値\nここに改行";
// ○ 正しい順番
echo nl2br(htmlspecialchars($input, ENT_QUOTES, 'UTF-8'));
// × 間違った順番(brタグがエスケープされてしまう)
echo htmlspecialchars(nl2br($input), ENT_QUOTES, 'UTF-8');
?>
ちなみに、改行だけでなくテキスト全体のフォーマットを制御したい場合は、CSSのwhite-spaceプロパティを使う方法もあります。
興味のある方は、こちらもチェックしてみましょう。
まとめ
今回は、PHPユーザー向けに、改行コードをHTMLの改行タグに変換する方法を紹介しました。
- PHPで改行をHTMLに反映するなら
nl2br()関数が一番簡単 - 第2引数に
falseを指定すれば、<br>タグで出力できる - ユーザーの入力値を表示する場合は、必ず
htmlspecialchars()と併用してセキュリティ対策を行う
nl2br()関数を使用することで、お問い合わせフォームやコメント欄の表示がかなり見やすくなります。
セキュリティ対策も忘れずに行い、安全なWebアプリケーションを開発していきましょう。






















