php – Twig与Symfony 2显示在prod和dev之间不同的json编码变量

前端之家收集整理的这篇文章主要介绍了php – Twig与Symfony 2显示在prod和dev之间不同的json编码变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们正在构建一个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)
    )
);

视图

<script language="javascript">
    user = $.parseJSON("{{ userJSON }}");
</script>

结果

在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("{&quot;configuration&quot;:{&quot;levels&quot;:{&quot;warning&quot;:0.05,&quot;danger&quot;:0.1}}}");

控制台错误:未捕获语法错误:意外的令牌&

什么产生这个差异?

编辑:另外查看@ Lulhum的解决方案.如果它更好,最好选择它作为正确的答案.

“问题”是Twig自变量变量.我使用Twig的原始过滤器来跳过自动转换,如下所示:

<script language="javascript">
    user = $.parseJSON('{{ userJSON | raw }}');
</script>

现在打印:

user = $.parseJSON('{"configuration":{"levels":{"warning":0.05,"danger":0.1}}}');

链接
Symfony 2 Docs – Output escaping

猜你在找的PHP相关文章