【Laravel】Bladeで見る{{ }}と{!! !!}の違い(エスケープ処理)

Laravel

LaravelのBladeテンプレートを使って変数などを取り出す際に、{{}}(二重の波かっこ)を使いますが、その2つの違いを整理しました。

{{ }}

この中には「式・値・変数・関数」などが入るイメージです。

htmlspecialchars関数を通してHTMLエスケープ処理がされます。

この書き方をすると、HTMLのタグもそのまま出るので、タグとしては機能がなされなくなります。

なぜエスケープ処理を行うかというと、クロスサイトスクリプティング(XSS)対策のためといえます。

{!! !!}

対して、{!! !!}は、HTMLのエスケープ処理をしたくないときに使います。

波かっこは1つのみになり、2つの「!!」で挟みます。

具体的なケースとしては、bodyタグの中を表示などを行いたいときに使う、ということが考えられます。

そのままタグも適用されますが、セキュリティ的にはよくないので多用すべきではなく、特定のタグのみを使えるようにする方法を使う方が無難です。

こちらの記事が参考になります。

Blade の {{ }} と {!! !!} とは結局どう違うのか、および特定のタグだけ許可したい場合 - Qiita
この記事について こちらの記事を拝読して興味が湧き、もう少し深掘りしたいと思ったので、書くことにしました。 【Laravel】Bladeテンプレートの{!! !!}とは結局何なのか - Qiita (@ike-taka さん...

{{ }}と{!! !!}違いのまとめ

・基本的には{{ }}を使う
  – XSS対策のため
  – タグは文字列として出てくる
・{!! !!}はエスケープ処理を無効化させる
  – タグも出せる
  – ただしセキュリティ上、非推奨なので特定のタグのみを使えるようにすることを考えていく方が良い

コメント

タイトルとURLをコピーしました