在我的项目中,我将Symfony 4.3与Twig结合使用,将javascript与jquery结合使用。
我需要将一个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"}
这看起来像loke有效的json,因为双qoute用斜杠转义。但当我在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]
我已经在我的原始对象或json_encode($new_obj, JSON_HEX_QUOT)
上尝试过内部{{ data|json_encode() }}
函数,但没有帮助。
任何关于如何修复的想法都将受到欢迎。非常感谢。
您可以先将变量转换为json,然后再将其传递给trick:
$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"}
或者您可以直接在页面内部使用trick对其进行json_encode:
{{ new_obj|json_encode|raw }}