javascript - 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)
它没有帮助。
欢迎任何如何解决它的想法。谢谢你。
解决方案
您可以在将变量传递给 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 }}