错误信息提示:
Malformed UTF-8 characters, possibly incorrectly encoded
刚开始表示比较懵,系统正常用着,突然出现了这个问题,而且受到网上其他解说的误导,真的以为是数据库配置出现问题了(尽管这期间,测试数据库的确有出现问题)。
数据库服务恢复以后,发现问题依然,于是信息查看代码的具体错误,并进行追踪
/** * 处理数据 * @access protected * @param mixed $data 要处理的数据 * @return mixed * @throws \Exception */ protected function output($data) { try { // 返回JSON数据格式到客户端 包含状态信息 $data = json_encode($data, $this->options['json_encode_param']); if ($data === false) { throw new \InvalidArgumentException(json_last_error_msg()); } return $data; } catch (\Exception $e) { if ($e->getPrevious()) { throw $e->getPrevious(); } throw $e; } }
问题定位在这里,json_encode以后,data返回了false, 正常情况下对数组进行json_encode的时候不会有问题的,除非数据库出现了非utf-8的字符集或者乱码。
于是打印原始数据,果然在某个字段进行截取指定位数加星号处理的时候,截断了字符,导致乱码。
解决方案:
1.修正导致乱码的字符;
2.封锁导致乱码的字符集入口,增加验证;
3.调整字符串截取函数支持中文截取;
总结:
有时候遇到问题,直接bd出来的答案只是别人的答案,并不一定适合自己。
转载请注明:苏demo的别样人生 » php Malformed UTF-8 characters, possibly incorrectly encoded 解决办法