LaravelのBladeでの改行コードを含むデータの表示【現役SEが解説】

PROGRAM

今回は、LaravelのBladeでの改行コードを含むデータの表示について、簡単に解説していきます。

①特殊文字をエスケープする

まず、XSS対策のため、特殊文字をエスケープします。

Laravelの場合、e関数を使うことでHTMLの特殊文字をエスケープできます。

$data = "<div>hoge<br />hoge\nhoge</div>";
e($data); // &lt;div&gt;hoge&lt;br /&gt;hoge\nhoge&lt;/div&gt;

上記のコードのように、e関数を通すと、改行コードはそのままである一方で、改行タグを含むHTMLの特殊文字がエスケープされます。

②改行タグの挿入

特殊文字をエスケープ後に、改行コードを改行タグにします。

実際には、nl2br関数を使って改行コードの前に改行タグを挿入する形となります。

$data = "<div>hoge<br />hoge\nhoge</div>";
nl2br(e($data)); // &lt;div&gt;hoge&lt;br /&gt;hoge<br />\nhoge&lt;/div&gt;

上記の例では、e関数とnl2br関数を使うことで、\nの改行コードの前だけに<brgt;タグが挿入されます。

③改行タグをエスケープしないで出力(最終形)

LaravelのBladeでデータを出力する際は、{{ }}を使います。

ただし、改行コード由来の改行タグのエスケープを避けるために、{{!! !!}}を使う必要があります。

$data = "<div>hoge<br />hoge\nhoge</div>";
{{!! nl2br(e($data)) !!}} // &lt;div&gt;hoge&lt;br /&gt;hoge<br />\nhoge&lt;/div&gt;

上記のコードの例のように、e関数とnl2br関数を通したうえで{{!! !!}}を使うことで、改行コード由来の改行タグだけがエスケープされない状態で表示させることが可能になります。