默认情况下,Laravel 5 Form::model(..)已转义


Laravel 5 Form::model(...) escaped by default?

也许这是我缺少的一件简单的事情,但在我的laravel刀片模板中,我有这样的东西:

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

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

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

它按预期工作。输出html时是否总是需要使用{!! ... !!}?我在上面读到的所有教程都显示了使用{{ Form::model(...) }}的常规惯例来打开表单。谢谢你的建议!使用Laravel 5 fwiw。

这是正确的。

Laravel 4

原始html的{{ ... }}
htmlentities() 逃离的{{{ ... }}}

Laravel 5

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


如果你不喜欢它,你可以用以下方法更改所有3个标签:

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

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

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

过去{{ text }}是未转义的,{{{ text }}}是转义的,但随着Laravel 5的出现,情况发生了变化。现在,{{ text }}表示转义,{!! text !!}表示未转义。因此,是的,在Laravel 5中,HTML总是需要后者。

最有可能的是,你读过的所有教程都在使用旧版本。我将是第一个承认这可能有点令人困惑的人。我自己还不太习惯

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

Laravel4.x:CCD_ 13:内容标签,CCD_ 14:原始标签,{{ text }}:转义标签/默认值。

Laravel5.x:CCD_ 16:内容标签,CCD_ 17:原始标签,{!! text !!}:转义标签。

刀锋是魔法!