【php】改行を維持しつつhtmlspecialcharsでHTMLエンティティ化して出力する方法

php

テキストエリアなどに入力された文字をphpで出力する際、「<」や「>」などのhtmlタグに使われる特殊文字を「&lt;」や「&gt;」などブラウザ上で可読できる文字に変換(HTMLエンティティ化)するのにhtmlspecialchars関数が使われますが、同時に改行を維持したといったことはがあると思います。
そこで今回は、htmlspecialchars関数と、改行コードの前に<br>を挿入してくれる関数nl2brを併用してHTMLエンティティ化しつつ改行を維持する方法をご紹介します。

※nl2brを使った<br>の挿入方法についてはこちらをご確認ください。

htmlspecialcharsとnl2brを併用してHTMLエンティティ化+改行を実現する方法

<?php
$example = “文中に<strong>htmlのコードを含む</strong>と同時に\n改行を含む文字列”;

echo nl2br(htmlspecialchars($example));
?>

html上出力結果

文中に&lt;strong&gt;htmlのコードを含む&lt;/strong&gt;と同時に<br>
改行を含む文字列

ブラウザー上出力結果

文中に<strong >htmlのコードを含む</strong>と同時に
改行を含む文字列

先にhtmlspecialcharsでHTMLエンティティ化された文字列をnl2b関数で出力することでHTMLエンティティ化しつつ改行有りの出力ができます。

順番が違うと改行が維持されず、<br>がHTMLエンティティ化されて出力されますのでご注意ください。