Laravel(Blade)を使用していて、HTMLに出力する内容をエスケープしたくない機会というのがあると思います。
例えば、下記のようなHTMLの内容をVIEW(Blade)側で表示したい時です。
・コントローラー側(PHP)の処理
//PHP側の処理で変数にHTMLを代入する $text = '<p><strong>Lorem</strong> ipsum dolor <img src="images/test.jpg"></p>'
しかし、普通に{{$text}}のような記載をVIEW側(Blade)で記載してもPHPのhtmlentities関数を自動的に通されるため、HTMLを出力することができません。
これは、XSS攻撃を防ぐ為に、Bladeで実行している処理です。
クロスサイトスクリプティング(XSS攻撃)とは、「他人のWebサイトへ、悪意のあるスクリプトを埋め込む」攻撃のことを言います。
クロスサイトスクリプティング
クロスサイトスクリプティング
このXSS攻撃を防ぐ為に行なっているPHPのhtmlentities関数を通さず、変数の内容を表示する方法について今回は、紹介します。
それは、下記のような方法です。
<!-- ①この記載方法では、PHPのhtmlentities関数を通す。 --> {{$text}} <!-- ②この記載方法では、PHPのhtmlentities関数を通さずに画面出力する。 --> {!! $text !!}
上記の例のように①のような記載方法では、XSS攻撃を防ぐ為に行なっているPHPのhtmlentities関数を通すのですが、②のように記載するとPHPのhtmlentities関数を通さずに変数の内容を画面出力することができます。
アプリケーションでユーザーの入力内容をechoする場合は注意が必要となります。コンテンツは常に二重の波括弧の記法でHTMLエンティティにエスケープすべきです。
豆知識として、覚えておくとLaravel(Blade)を使用し開発をする際に役立つ知識だと思います。