2015-11-25 2 views
2

Я видел, что этот вопрос задавался слишком много раз за эти годы. Все еще не может воздержаться от того, чтобы спросить, улучшилось ли что-то в течение этого времени.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); 
}); 

Это работает, однако, я ищу для некоторых более осведомленного источника. Я прочитал несколько других вопросов, в которых люди избегают не только двойных кавычек, но и линейных каналов, возврата каретки и обратных косых черт.

Последнее, что мне нужно попасть в ловушку края корпуса :)

Любые намеки на меня?

+1

Ускорение с помощью слэшей дает вам проблемы, потому что, когда вы помещаете его внутри еще одной строки в свой файл javascript, косая черта пропускает цитату * перед отправкой ее на JSON.parse, что приводит к недействительности json. Слэш должен быть экранирован, а также цитата, чтобы она работала. например, '{" name ":" Name \\ "Псевдоним \\" Фамилия "}' будет интерпретироваться как javascript как '" {"name": "Name \" Nickname \ "Surname"} ", который является строка, которая действительна json. –

ответ

3

Поскольку JSON можно непосредственно использовать в качестве литерала объекта в JavaScript, вы можете использовать его как это:

var decoded = <?php echo $jsonData ; ?>; 

тем самым устраняя необходимость делать дальше разбора, чтобы избежать проблем с ' или \ символов в пределах текст. json_encode уже должен заботиться о " charaters.

+0

Эй, это действительно просто. Мне немного стыдно :) Спасибо! :) –

+0

И, наконец, 11 минут, и я могу принять ваш ответ :) –

+0

О, я не понимал, что это все еще для пользователей с большим количеством репутов. –

Смежные вопросы