PHP json_encode 中文

来源:互联网 发布:怎样做淘宝客网站 编辑:程序博客网 时间:2024/06/06 08:47

背景

在做项目的时候,需要存储用户的操作行为,所以把操作的参数json_encode 后放入的数据库。按照当时的估计所有参数的长度不超过300字,为了以后的扩展,所以在数据库把这个字段的设置成varchar(500)。

问题

把问题简化一下,比如只有两个参数email和content然后进行json_encode后存入数据库
$parameters = array(        'email' => 'shijie@gmail.com',        'content' => '我在用json_endcode做测试',); $parameters = json_encode($parameters);

把$parameters 存入到数据库中, 数据库中存储的内容显示的布置中文是unicode编码。在一次操作的过程中,由于content的长度为100个中文,导致json_encode的后的内容存入数据库后被截断(当插入的长度超过数据库字段的长度后,内容会被截断)。

分析

email加上content的内容的长度加起来不应该超过200,怎么会被截断呢?后来发现是json_encode的问题,因为json_encode时把中文进行的unicode编码,这样一个中文占用的就不是1个字了,而是6个字,比如中国,unicode表示是“\u4e2d\u56fd“这样就会导致超长的情况发生。所以进行json_encode并且需要存储到数据库的时候需要注意这个问题。

解决方法

json_encode函数的第二个参数options设置成JSON_UNESCAPED_UNICODE即可,如下所示
json_encode($parameters, JSON_UNESCAPED_UNICODE)
注意,使用此参数的php版本需要>=5.4.0

参考文章

  1. 官方手册
  2. 让Json更懂中文(JSON_UNESCAPED_UNICODE)
原创粉丝点击