作者: kideny 访问次数: 736 创建时间: 2021-02-01 21:39:42 更新时间: 2024-05-03 17:47:35
最近两年PHP的版本更新越来越快,不过随之而来的就是bug也越来越多,PHP与开发框架的版本升级导致项目越来越不稳定。这两天就碰到一个恼人的问题,代码原封未动的情况下,json_encode返回数据报错。
错误代码如下:
Class: InvalidArgumentException:
Exception: json_encode error: Malformed UTF-8 characters, possibly incorrectly encoded
报错原因解析:
这个问题实际上,从PHP7.2开始就会报错。源头需要去查询PHP的官方文档,地址如下
https://www.php.net/manual/zh/function.json-encode.php
json_encode这个函数,从PHP7.1开始,到PHP7.2和PHP7.3,每个版本都进行了改动。其中,PHP7.2给json_encode引入了一个标记 JSON_INVALID_UTF8_IGNORE。
当json_encode处理的数据当中,出现了错误的不符合UTF8规则的字符,就会报错。
在PHP7.2以前,PHP是默认忽略这个错误。从PHP7.2开始,这个报错会直接导致你代码GG了,需要在json_encode代码时,添加 JSON_INVALID_UTF8_IGNORE
,才能忽略这个错误。
当你返回的数据当中,有二进制的代码时,如果不添加这个标记,就一定会报错。
修复方法演示,以Phalcon框架为例:
PHP7.2以前没有问题的代码,这个代码在PHP7.2以后会报错
PHP7.2以后,修复BUG的代码。
Phalcon官方网站,对此也有详细说明,https://docs.phalcon.io/4.0/zh-cn/response。
总结
其他PHP框架如果出现类似问题,可以去框架的官网,查询对应的正确处理json_encode的方法。
语言: zh-CN
翻译人员:
原作者:
转载地址:
源网址:
版权: 本站所有内容, 版权归原作者所有。发表原创内容将会获得现金奖励, 并且随着时间倍数增长, 请了解我们的内容奖励计划。