エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【Laravel】Bladeに書く{{}}って何してるの?【244日目】

{{}}ってなんだろう?

よく、Bladeを書くときに、

{{ $user->name }}

みたいな書き方をすると思います。

データを取得して出力するのはわかりますが、具体的に何をしてるのでしょう?

echoとe関数を呼ぶ

上のコードですが、Laravelを通して変換すると、次のコードに変換されます。

<?php echo e($user->name) ?>

1.データをe関数に通す
2.e関数の結果をecho(画面に出力)する

の2つが行われます。では、e関数とは何でしょうか?

e関数は、htmlentities関数の代わり

e()は、Laravelが提供しているヘルパ関数で、やっていることは、ほぼhtmlentities関数と同じです。
Laravelのバージョンによっては、とある条件でhtmlentities関数を動かさないのですが、今回は割愛します。

つまり、HTML文字をエスケープして、画面に表示してくれるわけですね。

なので、さっきのコードはだいたい下と一緒です。

<?php echo htmlentities($user->name) ?>

【おまけ】htmlentities関数とは?

簡単に言うと、 <とかの記号を \&lt;に変換してくれます。
htmlspecialcharsを知っている人は、それの上位互換的な印象でだいたいあっています。
htmlspecialcharsとの違いとかは、この記事では割愛いたします。

これの嬉しいところは、 <div>って文字を表示させたいけど、 <div>というタグと読み込まれてしまう。
&lt;div&gt;と変換すると、ブラウザ側はこの文字を <div>という文字と認識してくれます。

公式ドキュメントのURLと引用テキスト

注意: Bladeの{{ }}文は自動的にPHPのhtmlentities関数を通し、XSS攻撃を防ぎます。

Bladeテンプレート 5.1 Laravel

e関数は指定された文字列にhtmlentitesを実行します。

echo e('<html>foo</html>');

// &lt;html&gt;foo&lt;/html&gt;

ヘルパ関数 5.1 Laravel