I am generating JSON with PHP.
I have been using
$string = 'This string has "double quotes"';
echo addslashes[$string];
outputs: This string has \" double quotes\"
Perfectly valid JSON
Unfortunately addslashes also escapes single quotes with catastrophic results for valid JSON
$string = "This string has 'single quotes'";
echo addslashes[$string];
outputs: This string has \'single quotes\'
In short, is there a way to only escape double quotes?
Erik B
39.2k24 gold badges115 silver badges127 bronze badges
asked Apr 10, 2011 at 11:33
1
Although you should use json_encode
if it’s available to you, you could also use addcslashes
to add \
only to certain
characters like:
addcslashes[$str, '"\\/']
You could also use a regular expression based replacement:
function json_string_encode[$str] {
$callback = function[$match] {
if [$match[0] === '\\'] {
return $match[0];
} else {
$printable = array['"' => '"', '\\' => '\\', "\b" => 'b', "\f" => 'f', "\n" => 'n', "\r" => 'r', "\t" => 't'];
return isset[$printable[$match[0]]]
? '\\'.$printable[$match[0]]
: '\\u'.strtoupper[current[unpack['H*', mb_convert_encoding[$match[0], 'UCS-2BE', 'UTF-8']]]];
}
};
return '"' . preg_replace_callback['/\\.|[^\x{20}-\x{21}\x{23}-\x{5B}\x{5D}-\x{10FFFF}/u', $callback, $str] . '"';
}
answered Apr 10, 2011 at 11:42
GumboGumbo
628k106 gold badges767 silver badges838 bronze badges
0
Is there a PHP function that only adds slashes to double quotes NOT single quotes
There is no function like addslashes[]
that only adds a slash to double quotes.
However you can make use of addcslashes[]
to only add
slashes to specific characters, e.g. only to double quotes:
addcslashes[$string, '"'];
That does exactly as described. If you want to have it compatible with stripcslashes[]
however, you need to add the slash itself to the list of chars:
addcslashes[$string, '"\\'];
That should do the job you've been asking for. I have no idea if that is compatible with json encoding.
Jon Surrell
9,0247 gold badges47 silver badges53 bronze badges
answered Apr 10, 2011 at 11:54
hakrehakre
187k48 gold badges419 silver badges803 bronze badges
If you are generating JSON, why not just use the
json_encode[]
function ?
answered Apr 10, 2011 at 11:36
Pascal MARTINPascal MARTIN
388k77 gold badges646 silver badges656 bronze badges
4
function json_string_encode[ $str ] {
$from = array['"']; // Array of values to replace
$to = array['\\"']; // Array of values to replace with
// Replace the string passed
return str_replace[ $from, $to, $str ];
}
To use the function you simply need to use
$text = json_string_encode[$text];
Jay Gilford
15.1k6 gold badges35 silver badges55 bronze badges
answered Oct 5, 2012 at 14:19
1