LaravelのBladeでの改行コードを含むデータの表示【現役SEが解説】
今回は、LaravelのBladeでの改行コードを含むデータの表示について、簡単に解説していきます。
①特殊文字をエスケープする
まず、XSS対策のため、特殊文字をエスケープします。
Laravelの場合、e関数を使うことでHTMLの特殊文字をエスケープできます。
$data = "<div>hoge<br />hoge\nhoge</div>"; e($data); // <div>hoge<br />hoge\nhoge</div>
上記のコードのように、e関数を通すと、改行コードはそのままである一方で、改行タグを含むHTMLの特殊文字がエスケープされます。
②改行タグの挿入
特殊文字をエスケープ後に、改行コードを改行タグにします。
実際には、nl2br関数を使って改行コードの前に改行タグを挿入する形となります。
$data = "<div>hoge<br />hoge\nhoge</div>"; nl2br(e($data)); // <div>hoge<br />hoge<br />\nhoge</div>
上記の例では、e関数とnl2br関数を使うことで、\nの改行コードの前だけに<brgt;タグが挿入されます。
③改行タグをエスケープしないで出力(最終形)
LaravelのBladeでデータを出力する際は、{{ }}を使います。
ただし、改行コード由来の改行タグのエスケープを避けるために、{{!! !!}}を使う必要があります。
$data = "<div>hoge<br />hoge\nhoge</div>"; {{!! nl2br(e($data)) !!}} // <div>hoge<br />hoge<br />\nhoge</div>
上記のコードの例のように、e関数とnl2br関数を通したうえで{{!! !!}}を使うことで、改行コード由来の改行タグだけがエスケープされない状態で表示させることが可能になります。