【PHP入門】改行コードをbrタグに変換!!nl2brをわかりやすく解説

こんにちは!エンジニアの大竹です!

今回は改行文字(コード)をbrタグに変換する便利なnl2br関数について解説します!

使い方自体はとても簡単です!

ただし、nl2brは使い方を間違えると正しく変換されないこともあるので注意が必要です!

この記事では、

・nl2brの基本的な使い方
・nl2brのオプションを用いた詳細な使い方

といった内容から

・nl2brの逆(brタグを改行コード)にする方法
・nl2brを使ったけど変換されなかった場合の対処法

までの内容を解説していきます!

目次

nl2brを使ってみよう

使い方

まずは基本的な使い方を知りましょう!
といってもとても簡単です。

コードを見てみましょう!

<?php
$message = "Melon\r\nBanana\r\nApple";

echo nl2br($message);
?>

実行結果:

Melon<br />

Banana<br />

Apple

このサンプルコードを見ていただいて分かる通り改行コード「\r\n」「<br />」に変換するというとてもシンプルな関数です。

ちなみに改行コードが「\n」だった場合どうなるでしょうか?

こちらも次のサンプルをごらんください

<?php
$message = "Melon\nBanana\nApple";

echo nl2br($message);
?>

実行結果:

Melon<br />

Banana<br />

Apple

こちらのケースも同じ結果になりました。
実行環境によって改行コードに違いがあったとしても同様に出力されます。

次の項では変換後のbrタグに関係するオプションについて解説します!

オプション

前項では改行コードが「<br />」に変換できました。

nl2brではbrタグの出力方法を選ぶことができます。

実際にサンプルコードを見てみましょう。

<?php
$message = "Melon\nBanana\nApple";

echo nl2br($message ,false);
?>
Melon<br>
Banana<br>
Apple

前項のサンプルコードとの違いわかりますか?

変換されたbrタグが「<br />」ではなく「<br>」になっています。

何らかの理由で「<br />」ではなく「<br>」したい場合は第二引数のオプションにfalseを指定すると良いでしょう。

brタグを改行コードへ変換する

先程までは改行コードをbrタグに変換するnl2br関数についてご紹介しました。

では逆にbrタグを改行コードに変換するための関数はあるのでしょうか?

結論から言うとありませんが、次のようなサイトで解説されているような手法を使うことで実現することが可能です。

【PHP】本当のnl2brの逆関数
http://hi.seseragiseven.com/archives/559

nl2brを使ったのにbrタグに変換されない場合

nl2brは改行コードをbrタグに変換する関数ですが、ある使い方をすることで変換されなくなってしまいます。

まずは正しい使い方を見てみましょう。

<?php
$message = "Melon\nBanana\nApple";

echo nl2br($message);
?>

実行結果:

Melon<br />

Banana<br />

Apple

これは一番最初の章で提示したサンプルです。
特におかしいところはありません。

では次に問題のあるサンプルを見てみましょう。

<?php
$message = 'Melon\nBanana\nApple';

echo nl2br($message);
?>

実行結果:

Melon\nBanana\nApple

実行結果に違いがでていますよね!?

サンプルコードの違いを見ると大きく違いがないように感じるかもしれません。

しかし、先に紹介したコードはダブルクォーテーションで文字を囲っており2つ目のコードではシングルクォーテーションを囲っています。

シングルクォーテーションで文字を囲った場合は、改行コードが改行コードとして評価されないためこのような状態がおきます。

そのため、改行コードを取り扱うときにはこのシングルクォーテーションとダブルクォーテーションの違いをより意識して使い分ける必要があります。

まとめ

いかがだったでしょうか?

今回は簡単に使えるnl2br関数について紹介しました。

しかし、動作を正しく理解していないと思わぬところで不具合を出してしまう可能性もあり注意が必要です。

この記事の内容を忘れないようにしておきましょう!

この記事を書いた人

30歳、フリーランスプログラマ。中学の頃よりプログラミングに興味を持ちゲーム開発やWebサイト構築などを経験
新しいフレームワークやライブラリに興味があり革新的な機能が含まれていると泣いて喜ぶ。

目次