很抱歉,这很可能是我自己的误解,而不是实际存在的问题。我对 Laravel 和 Blade 模板相当陌生,我正在尝试输出从 Input::get
中获取的一些字段。但是,当我通过双花括号和三花括号输出字段时,输出之间似乎没有区别。
这是我的观点的摘录:
@ $data = Input::only('name', 'date');
{{ "Unfiltered input: ".$data['name'] }}
<br />
{{{ "Filtered input: ".$data['name'] }}}
但是,当我提供带有特殊字符或代码的输入并查看呈现页面的源代码时,我看到为两者呈现的相同、未过滤的输入。
根据 Laravel documentation ,我想在输出到 View 时严格使用 {{{ }}}
,但我没有看到它实际上被“转义或净化”。我还没有完全开始设置 Validation ,我认为这是安全和卫生的主要冲击,对吗?但是现在只关注这个,我是不是误解了三重花括号应该做什么?还是他们在幕后工作,而我只是没有看到最终结果?像这样输出用户输入时,我还应该做些什么吗(除了设置验证层之外)?
最佳答案
拉拉维尔 4
双花括号和三花括号之间的唯一区别在于,三花括号通过 e()
辅助函数运行值,这只是 PHP htmlentities 函数的快捷方式。
{{ "Unfiltered input: ".$data['name'] }}
{{{ "Filtered input: ".$data['name'] }}}
编译成:
<?php echo "Unfiltered input: ".$data['name']; ?>
<?php echo e("Filtered input: ".$data['name']); ?>
但是,所有这些都发生在输出上。它与清理输入没有任何关系。
拉拉维尔 5
在 Laravel 5 中,Blade 语法发生了变化,双花括号 ({{ }}
) 将转义输出,并且新的花括号双感叹号语法 ({!! !!}
) 不会转义输出。
所以,
{{ "Filtered input: ".$data['name'] }}
{!! "Unfiltered input: ".$data['name'] !!}
编译成:
<?php echo e("Filtered input: ".$data['name']); ?>
<?php echo "Unfiltered input: ".$data['name']; ?>
关于php - 这个 Blade 卫生是否正常工作(双花括号与三花括号)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28503920/