php-symfony 4分支斜杠转义双引号被删除,JSON被破坏



在我的项目中,我将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 }}

最新更新