小程序微信授权登录,我们的测试同事的微信昵称比较萌萌哒【阿哒~!?】,有两只熊掌,就是这两只掌导致在使用json_encode()处理接收的数据,直接返回了null值,导致接收不到数据。

通过json_last_error()函数获得错误码 5 ,得知有异常的 UTF-8 字符,也许是因为不正确的编码。
想了个方法,让前端在请求数据把参数base64处理下,我接收数据时再base64解析出来,这个过程没有问题,但是我们接口请求有记录的操作,

这时报错:
General error: 1366 Incorrect string value: '\xF0\x9F\x98\x83\xF0\x9F...' for column 'content' at row 1
json_encode($data, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT)的意思就是中文不转义,保留中文字符的意思,就是你的字符串在json编码的时候会保留中文,其它的都会被转义。
查看json_encode()文档其中第二个参数的预定义常量中,JSON_PARTIAL_OUTPUT_ON_ERROR 文档解释:Substitute some unencodable values instead of failing.(替换一些不可编码的值,而不是失败)这不就是我现在的情况么,替换一些不可编码的值,测试=>通过。
总结:
平常只用JSON_UNESCAPED_UNICODE 就可以了。如果有emoji表情就用JSON_PARTIAL_OUTPUT_ON_ERROR 常量进行编码,否则要抛出异常。


发表评论 取消回复