LaravelのBladeでのエスケープ【現役エンジニアが解説】

PROGRAM

今回は、LaravelのBladeでのエスケープについて、簡単に解説していきます。

エスケープする

以下の文字列を想定します。

<span>ほげ</span>

これをエスケープして表示したい場合は{{ }}で変数を囲みます。

{{ $string }}

こうすることによって、下記のようにエスケープされ、ただの文字列として表示できます。

&lt;span&gt;ほげ&lt;/span&gt;

エスケープしない

先程と同様に以下の文字列を想定します。

<span>ほげ</span>

これをエスケープせずに表示したい場合は{!! !!}で変数を囲みます。

{!! $string !!}

すると、以下のようにエスケープされずにHTMLタグとして認識されることになります。

<span>ほげ</span>

HtmlStringはエスケープされない

LaravelではCSRF対策として以下のものを書くことがあります。

{{ csrf_field() }}

{{ }}で囲っているため、本来、エスケープされて表示されるはずですが、なぜか以下のように出力されエスケープされません。

<input type="hidden" name="_token" value="トークン">

vendor/laravel/framework/src/Illuminate/Foundation/helpers.phpを見るとわかりますが、HtmlStringオブジェクトを渡すと{{ }}で囲ってもエスケープされないという例外があるためです。

function csrf_field()
{
    return new HtmlString('<input type="hidden" name="_token" value="'.csrf_token().'">');
}