JSON 是 JavaScript Object Notation(JavaScript 对象表示法)的缩写,是一种轻量级的数据交换格式。在 PHP 中,开发者可以使用内置函数 json_encode() 将数组或对象转换为 JSON 格式,以便前后端或不同系统间进行数据交互。从 PHP 5.2.0 版本开始,json_encode() 就被广泛应用于 Web 开发中。
当 json_encode() 函数处理包含中文的数组或对象时,默认行为会将中文字符转换为 Unicode 编码。例如:
$arr = array('name' => '张三', 'age' => 18, 'gender' => '男');
echo json_encode($arr);
// 输出结果:{"name":"\u5f20\u4e09","age":18,"gender":"\u7537"}
可以看到中文被转义成了 Unicode 编码,这在某些情况下会造成显示乱码或者不便于阅读。
从 PHP 5.4.0 版本起,json_encode() 函数支持 JSON_UNESCAPED_UNICODE 选项。使用该选项可以防止中文被转义,从而保持中文字符的原样输出。
$arr = array('name' => '张三', 'age' => 18, 'gender' => '男');
echo json_encode($arr, JSON_UNESCAPED_UNICODE);
// 输出结果:{"name":"张三","age":18,"gender":"男"}
该方法是最简洁、推荐的方式,但需要确保服务器的 PHP 版本为 5.4 及以上。
对于 PHP 5.4 以下的版本,可以通过 urlencode() 和 urldecode() 方法手动转义和解码中文字符来避免乱码问题:
$arr = array('name' => '张三', 'age' => 18, 'gender' => '男');
$new_arr = array();
foreach($arr as $key => $value) {
$new_arr[$key] = urlencode($value);
}
echo urldecode(json_encode($new_arr));
// 输出结果:{"name":"张三","age":18,"gender":"男"}
该方法兼容旧版本 PHP,虽然略显繁琐,但能有效避免中文被转义的问题。
为了更好地支持中文显示,开发者可以根据当前所用 PHP 版本选择合适的解决方案。如果版本支持,使用 JSON_UNESCAPED_UNICODE 是首选;如果不支持,也可以通过手动转义和解码的方式实现相同的效果。正确地处理中文编码问题,能够提升前后端交互的用户体验和数据可读性。