PHP JSON String, escape Double Quotes для вывода JS

Я создаю строку 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