我学习Laravel,但我很困惑。使用表单时,使用感叹号与另一个花括号之间有什么区别?两者似乎都完成了同样的事情。
{!! Form::open(array('route' => 'post_store', 'class' => 'form')) !!}
{{ Form::open(array('route' => 'post_store', 'class' => 'form')) }}
答案 0 :(得分:1)
默认情况下,Blade {{}}语句会自动通过PHP的htmlspecialchars函数发送,以防止XSS攻击。如果您不希望转义数据,可以使用以下语法:
你好,{!! $ name !!}。
htmlspecialchars函数通过转义(不执行)用户在文本区域或文本字段中输入的代码来防止XSS攻击,只是按原样显示,如果执行代码可能会损害您的应用程序。
跨站点脚本(XSS)是一种利用动态生成的Web页面的安全漏洞。在XSS攻击中,Web应用程序与脚本一起发送,该脚本在毫无戒心的用户的浏览器或未保护自己免受跨站点脚本编写的应用程序读取时激活。
答案 1 :(得分:1)
{!! !!}
将逃避您的数据。
对此的一个很好的用途是,例如,使您的链接可点击。
因此,如果是$data = "www.google.com";
,那么
{{ $data }}
无法点击。
{!! $data !!}
可点击。
答案 2 :(得分:1)
这些语法差异不会导致任何输出差异的原因是因为Laravel Blade不会转义Illuminate\Support\HtmlString
返回Form::open()
的实例。
因此,转义语法{{ Form::open() }}
和未转义的语法{!! Form::open() !!}
都将在不转义的情况下处理。 HtmlString用于多个领域,以避免转义必要的HTML,包括csrf_field()
。