我正在使用PHP生成JSON。
我一直在使用
$string = 'This string has "double quotes"';
echo addslashes($string);
输出:This string has \" double quotes\"
完全有效的JSON
不幸的是,addslashes也会使用单引号转义为有效JSON的灾难性结果
$string = "This string has 'single quotes'";
echo addslashes($string);
输出:This string has \'single quotes\'
简而言之,有没有办法只能逃避双引号?
答案 0 :(得分:49)
虽然如果您可以使用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) . '"';
}
答案 1 :(得分:13)
是否有PHP函数只在双引号中添加斜杠而不是单引号
没有像addslashes()
这样的函数只会在双引号中添加斜杠。
但是,您可以使用addcslashes()
仅向特定字符添加斜杠,例如仅加双引号:
addcslashes($string, '"');
完全如上所述。但是,如果你想让它与stripcslashes()
兼容,你需要将斜杠本身添加到字符列表中:
addcslashes($string, '"\\');
那应该做你一直要求的工作。我不知道这是否与json编码兼容。
答案 2 :(得分:4)
如果要生成JSON,为什么不使用json_encode()
函数?
答案 3 :(得分:2)
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 );
}
要使用此功能,您只需使用
$text = json_string_encode($text);