Я создаю строку JSON из массива PHP. Я закодировал его с помощью json_encode()
.
$data = array( 'title' => 'Example string\'s with "special" characters' ); $data = json_encode( $data );
$data
локализовано с помощью wp_localize_script()
и доступно через глобальную переменную data
.
В JS-файле я могу получить доступ к следующей информации:
var data = data.replace( /"/g, '"' ), jsonData = jQuery.parseJSON( data ); console.log( jsonData );
Это приводит к выводу:
{ "title":"Example string's with "special" characters" }
Ввод этого результата в http://jsonlint.com/ возвращает ошибку. Удаление двойных кавычек вокруг «специального» проверяет строку.
Каков наилучший способ создания JSON-строки из PHP и надлежащим образом избежать ее использования в JS-файле?
С http://www.php.net/manual/en/function.json-encode.php#100565
Тем не менее, цитаты «будут приводить к недопустимому JSON, но это только проблема, если вы используете json_encode () и просто ожидаете, что PHP волшебным образом избежит ваших котировок. Вам нужно выполнить эвакуацию самостоятельно.
Другой способ заключается в кодировании кавычек с использованием htmlspecialchars :
$json_array = array( 'title' => 'Example string\'s with "special" characters' ); $json_decode = htmlspecialchars(json_encode($json_array), ENT_QUOTES, 'UTF-8');
Я просто сделал это:
$json = str_replace("\u0022","\\\\\"",json_encode( $phpArray,JSON_HEX_QUOT));
По умолчанию json_encode () будет удаляться "
до \"
. Но это все еще неправильно JSON для json.PARSE()
. Поэтому, добавив опцию JSON_HEX_QUOT
, json_encode () заменит "
с помощью \u0022
. json.PARSE()
все равно не понравится \u0022
. Поэтому нам нужно заменить \u0022
\\"
. \\\\\"
экранировано \\"
.
ПРИМЕЧАНИЕ. Вы можете добавить опцию JSON_HEX_APOS, чтобы заменить одиночную кавычку значением HEX в unicode, если у вас есть проблема с одиночной кавычкой javascript. ex: json_encode ($ phpArray, JSON_HEX_APOS | JSON_HEX_QUOT));
Используйте json_encode ($ json_array, JSON_HEX_QUOT); поскольку php 5.3: http://php.net/manual/en/json.constants.php