我们正在构建一个 Symfony 2 应用程序,它将一些数据从控制器发送到视图:
控制器
$user = array(
'configuration' => array(
'levels' => array(
'warning' => 0.05,
'danger' => 0.10,
),
),
);
return $this->render(
'MyWebsiteBundle:Core:searchResults.html.twig',
array(
'userJSON' => json_encode($user)
)
);
View
<script language="javascript">
user = $.parseJSON("{{ userJSON }}");
</script>
Result
On dev
结果如下所示并且按预期工作:
user = $.parseJSON("\x7B\x22configuration\x22\x3A\x7B\x22levels\x22\x3A\x7B\x22warning\x22\x3A0.05,\x22danger\x22\x3A0.1\x7D\x7D\x7D");
另一方面,关于prod
结果以不同的方式编码,从而在控制台中显示错误:
user = $.parseJSON("{"configuration":{"levels":{"warning":0.05,"danger":0.1}}}");
控制台错误:未捕获的语法错误:意外的标记&
是什么产生了这种差异?
Edit:另请检查下面@Lulhum 的解决方案。如果它更好,请投票,这样我就会选择它作为正确答案。
“问题”是 Twig 自动转义变量。我用的是Twig的raw
过滤器跳过自动转义,如下所示:
<script language="javascript">
user = $.parseJSON('{{ userJSON | raw }}');
</script>
现在它打印:
user = $.parseJSON('{"configuration":{"levels":{"warning":0.05,"danger":0.1}}}');
Links:
Symfony 2 文档 - 输出转义 http://symfony.com/doc/current/book/templating.html#output-escaping
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)