php symfony 4 удаляется двойная кавычка, и JSON ломается - PullRequest
0 голосов
/ 25 октября 2019

В своем проекте я использую 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"}

, и это выглядит как валидный 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), но это не помогло.

Любые идеи, как это исправить, приветствуются. Спасибо.

1 Ответ

0 голосов
/ 25 октября 2019

Вы можете либо превратить вашу переменную в 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"}

Или вы можете json_encode с помощью веткипрямо внутри страницы:

{{ new_obj|json_encode|raw }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...