在使用ajax在前端向后台请求数据时,如果数据出现中文,那么在返回数据时会出现错误。json_encode只能接受utf8的数据,当json_encode碰到中文的时候会自动将中文从utf8转换成unicode类型。解决办法有一下几个:
1.JSON_UNESCAPED_UNICODE选项, 故名思议, 就是说, Json不要编码Unicode.
<?php echo json_encode("中文", JSON_UNESCAPED_UNICODE); //"中文"
2.把汉字先urlencode然后再使用json_encode,json_encode之后再次使用urldecode来解码,这样编码出来的json数组中的汉字就不会出现unicode编码了。
$array = array( 'test'=>urlencode("我是测试") ); $array = json_encode($array); echo urldecode($array); //{"test":"我是测试"}
3.在客户端进行unicode解码
php 端
$channelNames = array ();
foreach ( $tempNames as $item ) {
$channelNames [] = $item ['name'];
}
echo json_encode ( $channelNames, JSON_UNESCAPED_UNICODE );
js 端
success: function(result){
//console.log(decodeURI(result));
//json_encode时中文会进行转义,所以必须使用decodeURI进行转换回来
//decodeURI(result)是一个字符串
//channelNames=decodeURI(result).split(',');
},
参考资料: