最近使用PHP开发APP接口时遇到一个问题,在与APP对接时,需要将从数据库或缓存中获取的数据转换成json,在做json_encode的时候,中文会被unicode编码,但是不希望中文进行编码。
json原样输出中文形式如下:
{
"code":"200",
"message":"success",
"data":[
{
"id":"1",
"content":"\u6709\u4eba@\u4f60"
}
]
}
希望结果是:
{
"code": "200",
"message": "success",
"data": [
{
"id": "70",
"content": "中文测试",
}
]
}
总结出以下几种方法:
方法一
php5.4以后使用了json_encode的JSON_UNESCAPED_UNICODE参数可以实现对字符不做escape和unicode处理
使用方法如下:
$str = "中文测试";
json_encode($str,JSON_UNESCAPED_UNICODE);
但是经过测试后,发现不能对数组进行操作,如
$arr = array('id'=>'1','content1'=>'中文测试1','content2'=>'中文测试2');
json_encode($arr,JSON_UNESCAPED_UNICODE);
上面这种形式似乎不起作用,故采用了第二种方法
方法二
先对需要处理的做urlencode处理,然后json_encode,最后做urldecode处理 ,使用方法如下:
/**
* 使用url_encode()对字符串进行编码
* @param string/array $str 需要编码的数据
* @return string/array $str 返回编码后的字符串
*/
function url_encode($str) {
if(is_array($str)) {
foreach($str as $key=>$value) {
$str[urlencode($key)] = url_encode($value);
}
} else {
$str = urlencode($str);
}
return $str;
}
/**
* 输出json数据,不解析中文
* @param string/array $str 需要进行json编码的数据
* @return string 输出json数据
*/
function encode_json($str) {
$result = urldecode(json_encode(url_encode($str)));
return $result;
}
折腾好久之后,发现使用json_encode()直接输出的数据能直接在APP中直接使用,需要输出的json数据在客户端开发的控制台不解析,在客户端输出后可自动解析,不过也得到了不错的经验,希望继续学习