如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉。
$arr = array( 'name' => 'net IT技术博客', 'url' => 'www.net',);
运行echo json_encode($arr);结果输出:{"name":"net IT\\u6280\\u672f\\u535a\\u5ba2","url":"www.net"}
如何禁用掉这种转义呢?
PHP5.4+版本(多加 JSON_UNESCAPED_UNICODE 参数即可):
json_encode($json, JSON_UNESCAPED_UNICODE);
同样上面的数组,结果输出:{"name":".net IT技术博客","url":"www.net"}
PHP5.3版本及以下:
**方法一:**
$arr['name'] = urlencode($arr['name']);echo urldecode(json_encode($arr));
同样上面的数组,结果输出:{"name":".net IT技术博客","url":"www.net"}
**方法二:**
function json_encode_new($input) {
// 从 PHP 5.4.0 起, 增加了这个选项.
if(defined('JSON_UNESCAPED_UNICODE')) {
return json_encode($input, JSON_UNESCAPED_UNICODE);
}
if(is_string($input)) {
$text = $input;
$text = str_replace('\\', '\\\\', $text);
$text = str_replace(
array("\r", "\n", "\t", "\""),
array('\r', '\n', '\t', '\\"'),
$text);
return '"' . $text . '"';
} else if(is_array($input) || is_object($input)) {
$arr = array();
$is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1));
foreach($input as $k=>$v) {
if($is_obj) {
$arr[] = json_encode_new($k) . ':' . json_encode_new($v);
} else {
$arr[] = json_encode_new($v);
}
}
if($is_obj) {
return '{' . join(',', $arr) . '}';
} else {
return '[' . join(',', $arr) . ']';
}
} else {
return $input . '';
}
}
调用echo json_encode_new($arr);
结果输出:{"name":"net IT技术博客","url":"www.net"}。