【问题标题】:Laravel 5 Form::model(...) escaped by default?Laravel 5 Form::model(...) 默认转义?
【发布时间】:2015-04-07 21:43:39
【问题描述】:

也许这是我缺少的一个简单的东西,但在我的 laravel 刀片模板中我有类似的东西:

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

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

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

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

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    以前{{ text }} 未转义,{{{ text }}} 已转义,但随着 Laravel 5 的变化。现在,{{ text }} 表示转义,{!! text !!} 表示未转义。所以是的,在 Laravel 5 中你总是需要后者来处理 HTML。

    很可能,您阅读的所有教程都使用的是旧版本。我将是第一个承认这可能有点令人困惑的人。自己还没有完全适应。 :)

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

    【讨论】:

      【解决方案2】:

      没错。

      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('{{{', '}}}');
      

      【讨论】:

      • 你把刀片设置放在什么文件里?
      【解决方案3】:

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

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

      刀是魔法!

      【讨论】:

        猜你喜欢
        • 2015-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-09
        相关资源
        最近更新 更多