• 欢迎加“百元导航”为主页,windows8风格,0.3s极速加载
  • 王柏元的博客专用搜索引擎:极客人,就用“极客搜”!
  •    2年前 (2015-04-05)  软件开发 |   抢沙发  1490 
    文章评分 1 次,平均分 5.0

    由于在安卓软件开发实践中,笔者想给软件加上软件更新服务,于是决定依托自己的虚拟主机,用php制作一个自己的API。再通过json标准格式输出数据库的查询结果。

    一、实例展示

    API制作代码的简单形式是:

    通过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或以上,你可以使用上面的解决方案一。

    第二种方案是个通解,下面我来提供自己的代码给大家参考:

     

      
     

    除特别注明外,本站所有文章均为王柏元的博客原创,为了尊重作者的劳动成果,转载请注明出处http://wangbaiyuan.cn/php-using-json-encode-an-array-of-chinese-characters.html,如果你觉得这篇文章对你有用,可以点击文章下面的“赞助作者”打赏作者!

    关于
    记录生活,镌刻心路;泼洒文墨,分享技术!王柏元的博客致力于IT经验交流,并原创翻译引进外文文章,打开IT国际化视野

    发表评论

    格式

    暂无评论

    登录

    忘记密码 ?

    您也可以使用第三方帐号快捷登录

    切换登录

    注册