Laravel 5 Form :: model(...)默认转义?

时间:2015-02-07 22:02:55

标签: php laravel laravel-5

也许这是一件我想念的简单事情,但在我的laravel刀片模板中,我有类似的东西:

{{ Form::model(....) }}
    ... my fields ...
{{ Form::close() }}

这会导致转义为HTML,因此表单标签实际上会打印到屏幕上。但是,如果我这样做:

{!! Form::model(....) !!}
    ... my fields ...
{!! Form::close() !!}

它按预期工作。输出html时是否总是需要使用{!! ... !!}?我读过的所有教程只是使用{{ Form::model(...) }}的常规约定来打开表单。谢谢你的建议!使用Laravel 5 fwiw。

3 个答案:

答案 0 :(得分:2)

过去,{{ text }}未被转义,{{{ text }}}被转义,但是Laravel 5改变了。现在,{{ text }}用于转义,{!! text !!} 1}}为未转义的。所以,是的,在Laravel 5中,你总是需要后者用于HTML。

最有可能的是,您阅读的所有教程都使用旧版本。我是第一个承认这可能有点令人困惑的人。哈文自己已经习惯了。 :)

供参考: http://laravel.com/docs/5.0/templates - Laravel 5 http://laravel.com/docs/4.2/templates - Laravel 4

答案 1 :(得分:2)

这是正确的。

Laravel 4

{{ ... }}原始html
使用{{{ ... }}}

进行转义的htmlentities()

Laravel 5

{!! ... !!}原始html
显式转义内容的{{{ ... }}}
{{ ... }}表示默认行为(也是转义)


如果你不喜欢它,你可以用这些方法改变所有这三个标签:

Blade::setRawTags($openTag, $closeTag);
Blade::setContentTags($openTag, $closeTag);
Blade::setEscapedContentTags($openTag, $closeTag);

要恢复Laravel 4处理事物的方式,你可以这样做:

Blade::setRawTags('{{', '}}');
Blade::setEscapedContentTags('{{{', '}}}');

答案 2 :(得分:0)

Laravel4.x: {{{ text }}}:内容标签, @{{ text }}:原始代码, {{ text }}:转义标记/默认。

Laravel5.x: {{ text }}:内容标签, @{{ text }}:原始代码, {!! text !!}:转义标记。

刀锋是神奇的!