Я видел, что этот вопрос задавался слишком много раз за эти годы. Все еще не может воздержаться от того, чтобы спросить, улучшилось ли что-то в течение этого времени.json_encode с двойными кавычками, переданными в JSON.parse
В настоящее время у меня есть PHP код:
$jsonData = json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT);
, а затем JS (Угловая быть конкретными) вступает в игру:
var decoded = angular.fromJson('<?php echo $jsonData ; ?>');
Флаги выше делают очень хорошую работу по поддержанию некоторых проблемы в страхе. Однако, на примере:
$data = ["name" => "Name \"Nickname\" Surname"];
JSON не разбирается. Если я обернуть данные с addslashes()
, он работает, но потом:
$data = ["name" => "Name 'Nickname' Surname"];
Это терпит неудачу.
Поскольку структура $data
очень непредсказуемо, и, как правило, 4-5 уровней в глубину, мое решение было:
array_walk_recursive($data, function(&$item, $key){
$item = str_replace('"', '\"', $item);
});
Это работает, однако, я ищу для некоторых более осведомленного источника. Я прочитал несколько других вопросов, в которых люди избегают не только двойных кавычек, но и линейных каналов, возврата каретки и обратных косых черт.
Последнее, что мне нужно попасть в ловушку края корпуса :)
Любые намеки на меня?
Ускорение с помощью слэшей дает вам проблемы, потому что, когда вы помещаете его внутри еще одной строки в свой файл javascript, косая черта пропускает цитату * перед отправкой ее на JSON.parse, что приводит к недействительности json. Слэш должен быть экранирован, а также цитата, чтобы она работала. например, '{" name ":" Name \\ "Псевдоним \\" Фамилия "}' будет интерпретироваться как javascript как '" {"name": "Name \" Nickname \ "Surname"} ", который является строка, которая действительна json. –