改行がある文章でphpを使ってhtmlに出力する際、改行なしで表示されて困ったと言う経験はないでしょうか?
例えば、メールフォームやカスタムフィールド等でテキストエリア(textarea)に入力された文字を出力するときなどにこの問題に直面することがあると思います。
今回は、phpでこの改行を維持して表示させる方法をご紹介いたします。
phpで改行を挿入する方法
phpで改行を含む文字列が改行なしで表示されるのは改行位置に<br>が挿入されていないことが原因です。これを自動で行ってくれるphpの関数は「nl2br()」です。
「nl2br()」は改行コードの前に<br>を挿入してくれる関数です。ちなみに改行コードとはコンピュータで改行を識別するための特殊な文字(\r\n、 \n\r、\n および \r)のことです。
それでは早速使い方をみてみましょう。
1 2 3 4 |
<?php $moji ="改行を含む\n文字列"; echo nl2br($moji); ?> |
出力結果
1 2 3 |
改行を含む <br> 文字列 |
実際にこう言った使いかをすることはまれでしょうが、シンプルな例として上を用意してみました。改行コード(\n)を含む文字列をnl2br()関数を使って<br>有りで出力できました。ちなみにサンプルでは文字列をダブルクォーテーション「”」で囲っていますが、シングルクォーテーション「’」だと改行コードもただの文字列として認識され「\n」という文字がそのまま出力されますのでご注意ください。
テキストエリアで入力された文字を改行ありでhtml出力させる方法
たとえば、メールフォームの確認画面等、テキストエリアで入力された文字をフォームで送って別ページ上にhtmlで出力ささるといった操作はよくある作業だと思います。
phpでフォームから送られてきたデータを受け取る方法については先にこちらをご確認ください。
それでは、こちらをご確認ください。
1 2 3 |
<?php echo nl2br($_POST['text']); ?> |
フォームを method=”get”で送信するとわかりやすいのですが、テキストエリアから出力された文字の改行位置には「%0D」「%0A」といった改行コードが挿入されます。nl2br()関数を使うことで、こういった改行コードにも<br>を挿入させることが可能です。
nl2br()関数はカスタムフィールドのテキストエリアの出力にももちろん対応できます。
それについてはこちらの記事の「サンプルを使った解説」をご確認ください。
html特殊文字を文字列に変換しつつ改行を維持するには?
<や>などのhtmlタグに使われる特殊文字を<や>などブラウザ上で読める文字に変換するにはhtmlspecialchars関数を使いますが、nl2br関数と同時に使う場合は注意が必要です。
くわしくはこちらの記事をご確認ください。