aoma blog

エンジニアの日常とか技術とか

【Laravel】Formファサードって`{{ }}`で囲ってもエスケープされないの!?

この記事は移転しました。約5秒後に新記事へ移動します。
移動しない場合はココをクリックして新サイトをお楽しみください。

ふとレビューしてて気づきました。

{{ Form::text('test', '') }}

んん!?昔は{!! !!}で囲まないといけなかったはず!

疑問に思ったのは{{ }}はタグをエスケープするのに、Formファサードは無視するんだなーということ。

で、検証してみました。

{{ Form::text('test', '') }}
{!! Form::text('test', '') !!}
{{ '<b>text</b>' }}
{!! '<b>text</b>' !!}

↓ 結果はこうなる。なぜだ。。。

<input name="test" type="text" value="">
<input name="test" type="text" value="">
&lt;b&gt;text&lt;/b&gt;
<b>text</b>

もしかしてvalue値をエスケープするようになった?なんて妄想してみたが違った。

{{ Form::text('test', '<b>test</b>') }}
{!! Form::text('test', '<b>test</b>') !!}

<input name="test" type="text" value="&lt;b&gt;test&lt;/b&gt;">
<input name="test" type="text" value="&lt;b&gt;test&lt;/b&gt;">

で、最終的にありがたい記事が!

https://www.msng.info/archives/2016/01/laravel-blade-braces-dont-always-escape.php

Laravel 5.1 から下記のようになっていたとのこと。

function e($value)
{
    if ($value instanceof Htmlable) {
        return $value->toHtml();
    }
    return htmlentities($value, ENT_QUOTES, 'UTF-8', false);
}

ということで今後Formファサード{{ }}で囲もうと思います。
{!! !!} の出現頻度が減るのでgrepが捗りますね!)