I'm creating a JSON string from a PHP array. I've encoded it using json_encode()
.
$data = array(
'title' => 'Example string\'s with "special" characters'
);
$data = json_encode( $data );
$data
is localized using wp_localize_script()
and is accessible via a global data
variable.
In the JS file I can access the information by the following:
var data = data.replace( /"/g, '"' ),
jsonData = jQuery.parseJSON( data );
console.log( jsonData );
This results in an output of:
{ "title":"Example string's with "special" characters" }
Entering that result into http://jsonlint.com/ returns an error. Removing the double quotes around "special" validates the string.
What is the best way to create a JSON string from PHP and properly escape it for use in a JS file?
However if you intend to use a backslash in an escape sequence, obviously you shouldn't escape it. Show activity on this post. if you want to escape double quote in JSON use \\ to escape it.
JSON. Yes, if you use the ascii code.
JSON names require double quotes.
JSON numbers follow JavaScript's double-precision floating-point format.
Another way would be to encode the quotes using htmlspecialchars:
$json_array = array(
'title' => 'Example string\'s with "special" characters'
);
$json_decode = htmlspecialchars(json_encode($json_array), ENT_QUOTES, 'UTF-8');
I succefully just did this :
$json = str_replace("\u0022","\\\\\"",json_encode( $phpArray,JSON_HEX_QUOT));
json_encode()
by default will escape "
to \"
. But it's still wrong JSON for json.PARSE()
. So by adding option JSON_HEX_QUOT
, json_encode()
will replace "
with \u0022
. json.PARSE()
still will not like \u0022
. So then we need to replace \u0022
with \\"
. The \\\\\"
is escaped \\"
.
NOTE : you can add option JSON_HEX_APOS
to replace single quote with unicode HEX
value if you have javascript single quote issue.
ex: json_encode( $phpArray, JSON_HEX_APOS|JSON_HEX_QUOT ));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With