PHP json_encode 中文

在存储json_encode后的中文内容到数据库时遇到截断问题,因Unicode编码导致每个中文字符占6字节。通过设置json_encode的options参数为JSON_UNESCAPED_UNICODE,避免中文转义,解决超长截断,但需PHP 5.4.0以上版本支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景
在做项目的时候,需要存储用户的操作行为,所以把操作的参数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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值