Json php экранировать кавычки

PHP JSON String, экранирование двойных кавычек для вывода JS

$data локализуется с помощью wp_localize_script() и доступен через глобальную переменную data . В JS файле я могу получить доступ к следующей информации:

var data = data.replace( /"/g, '"' ), jsonData = jQuery.parseJSON( data ); console.log( jsonData ); 

Ввод этого результата в http://jsonlint.com/ возвращает ошибку. Удаление двойных кавычек вокруг «special» проверяет строку. Каков наилучший способ создать строку JSON из PHP и правильно ее избежать для использования в JS файле?

7 ответов

Тем не менее, цитаты «будут приводить к недействительным JSON, но это только проблема, если вы используете json_encode() и просто ожидаете, что PHP будет магически избегать ваших котировок. Вам нужно сделать эскалацию самостоятельно.

То есть вы не можете ожидать, что json_encode создаст действительный json? Я бы не стал нанимать этого разработчика

этот ответ, хотя и помеченный как принятый, не отвечает на вопрос. ОП спрашивает: каков наилучший способ создать строку JSON из PHP и правильно экранировать ее для использования в файле JS? В этом ответе говорится, что вам нужно сбежать самостоятельно, но это не лучший способ сделать это.

json_encode действительно экранирует кавычки. Ваш текст выше не существует на странице, на которую вы ссылаетесь. Поскольку это 8 лет, я предполагаю, что функция была обновлена или что-то, и этот ответ больше не верен.

Другим способом было бы закодировать кавычки, используя htmlspecialchars:

$json_array = array( 'title' => 'Example string\ with "special" characters' ); $json_decode = htmlspecialchars(json_encode($json_array), ENT_QUOTES, 'UTF-8'); 

Так что, если вы делаете echo ‘

‘ . json_encode($some_data); . ‘

‘ . Это, вероятно, правильный ответ. Я ошибочно делал htmlspecialchars на некоторых полях массива до json_encode, что вызывало множество неприятных ошибок, одна из которых привела меня сюда.

Я успешно только что сделал это:

$json = str_replace("\u0022","\\\\\"",json_encode( $phpArray,JSON_HEX_QUOT)); 

json_encode() по умолчанию будет экранировать » to \» . Но это все-таки неправильно JSON для json.PARSE() . Таким образом, добавив опцию JSON_HEX_QUOT , json_encode() заменит » на \u0022 . json.PARSE() все равно не понравится \u0022 . Итак, нам нужно заменить \u0022 на \\» . \\\\\» сбежал \\» .

ПРИМЕЧАНИЕ: вы можете добавить опцию JSON_HEX_APOS чтобы заменить одиночную кавычку на значение HEX JSON_HEX_APOS если у вас есть JSON_HEX_APOS с одинарными JSON_HEX_APOS в JavaScript.

например: json_encode( $phpArray, JSON_HEX_APOS|JSON_HEX_QUOT ));

Источник

Читайте также:  Цветовая сегментация изображения python
Оцените статью