由于在安卓软件开发实践中,笔者想给软件加上软件更新服务,于是决定依托自己的虚拟主机,用php制作一个自己的API。再通过json标准格式输出数据库的查询结果。
一、实例展示
API制作代码的简单形式是:
1 2 3 4 5 6 7 8 9 10 11 |
<?php $id = $_GET['id'];//get接受传值 api($id);//执行函数 //定义函数 function api($id){ //函数体 $array= array(1,2,3);//这是只是示意,表示$array是数组 $json=jsons_encode($array);//通过jsons_encode函数输出数组的json格式 echo $json; } ?> |
通过jsons_encode函数把数组转换成json格式时,会发现形如这样的中文乱码:
\u901a\u8baf\u5f55\uff0c\u662f\u738b\u67cf\u5143\u81ea\u4e3b\u5f00\
在反复检查PHP使用编码和数据库编码后,笔者才发现这是jsons_encode函数的问题,造成的原因如下:
二、原因分析:
在存储到数据库时!MySQL 不会存储 unicode 字符:MySQL 仅支持从基本的多语种平面字符 (0×0000-0xFFFF)。请尝试存储一个同义词相反:)
更新: MySQL 5.5.3 上 (其中尚未 GA), 支持补充字符如果您使用 UTF8MB4 编码。
json_encode中文的时候,会把每个中文字符encode成“uxxxx”,而存进数据库的时候,“”被屏蔽了,直接变成”uxxxx”
三、 解决问题:
1. 避免json_encode将中文转换unicode编码.
PHP5.4版本,已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。加上这个选项后,就不会自动把中文编码了。
$json= json_encode("王柏元的博客", JSON_UNESCAPED_UNICODE);
2. 先将中文字段urlencode,json_encode后,再用urldecode,也可以保证中文不会被转成unicode。
$json=urldecode(json_encode(array('brief'=>urlencode('王柏元的博客),'title'=>urlencode(王柏元的博客)));
四、解决问题的代码
上面分析了问题出现的原因,如果你的PHP版本在5.4或以上,你可以使用上面的解决方案一。
第二种方案是个通解,下面我来提供自己的代码给大家参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php function jsons_encode($array){ //遍历已有数组,将每个值 urlencode 一下 foreach($array as $key=>$value){ $array[$key]=urlencode($value); } //用urldecode将值反解 return urldecode(json_encode($array)); } /**注意:中间省略了数组获取的代码, 你可以使用上面的jsons_encode函数对你的数组进行转换 */ $json=jsons_encode($array); echo $json; ?> |

关注我的微信,获取文章更新
如果你觉得这篇文章对你有用,可以点击下面的“赞助作者”打赏作者!
转载注明原文出处:王柏元的博客>>https://wangbaiyuan.cn/php-using-json-encode-an-array-of-chinese-characters.html
暂无评论