我正在使用 PHP 生成 JSON。
我一直在用
$string = 'This string has "double quotes"';
echo addslashes($string);
输出:这个字符串有\"双引号\"
完全有效的 JSON
不幸的是,addlashes 也会对单引号进行转义,导致有效 JSON 的灾难性结果
$string = "This string has 'single quotes'";
echo addslashes($string);
输出:这个字符串有\'单引号\'
简而言之,有没有办法只转义双引号?
最佳答案
虽然你应该使用 json_encode
如果您可以使用,您也可以使用 addcslashes
仅将 \
添加到某些字符,例如:
addcslashes($str, '"\\/')
您也可以使用基于正则表达式的替换:
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) . '"';
}
关于php - 是否有一个 PHP 函数只在双引号而不是单引号中添加斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5611468/