首页 > 解决方案 > php symfony 4 twig slash 转义双引号被删除并且 JSON 被破坏

问题描述

在我的项目中,我使用带有 Twig 的 Symfony 4.3 和带有 jquery 的 javascript。

我需要将 json 编码的对象从 php 传递给 javascript,但它会被双引号破坏。例如,在 php 方面,我执行以下操作:

$new_obj = new \stdClass;
$new_obj->value = 'Some data with "double " quotes';
print_r(json_encode($new_obj));exit;

return $this->render('mytemplate.html.twig', [
    'new_obj' => $new_obj     
]);

所以这里print_r(json_encode($new_obj))给出以下内容:

{"value":"Some data with \"double \" quotes"}

这看起来像有效的 json,因为双 qoutes 用斜杠转义。但是当我在我的twig模板中得到它时,我会收到以下信息:

{"value":"Some data with "double " quotes"}

所以双引号被替换为"并且转义斜杠被完全删除。我可以使用以下代码恢复编码的引号:

function htmlDecode(input){      
    var doc = new DOMParser().parseFromString(input, "text/html");
    return doc.documentElement.textContent;
} 

但我怎样才能让我的 json 再次有效?JSON.parse()

Uncaught SyntaxError: Unexpected token d in JSON at position 26
at JSON.parse (<anonymous>)

[![pic][1]][1]

{{ data|json_encode() }}我已经在我的原始对象上尝试了树枝内部函数,或者json_encode($new_obj, JSON_HEX_QUOT)它没有帮助。

欢迎任何如何解决它的想法。谢谢你。

标签: javascriptphpsymfony

解决方案


您可以在将变量传递给 twig 之前将其转换为 json:

$new_obj = new \stdClass;
$new_obj->value = 'Some data with "double " quotes';

return $this->render('mytemplate.html.twig', [
    'new_obj' => json_encode($new_obj)     
]);

转储 new_obj 会告诉你:

{"value":"Some data with \"double \" quotes"}

或者您可以直接在页面内使用 twig 对其进行 json_encode:

{{ new_obj|json_encode|raw }}

推荐阅读