0 说明
系统为了兼容emoji表情以及其他特殊符号,在数据传入时使用urlencode()
函数处理了一下数据,并将处理后的数据保存到content字段,将原字符串存到content_bak字段,使用时将content字段先urldecode()
一下,然后将整组数据json_encode()
之后返回给前台。
1 发现
接口一直没有任何数据返回,但http状态码为200
2 排错
1.超出了nginx返回长度限制?
不对,因为直接使用var_dump()
数组的时候是可以输出的,此输出也是nginx返回的。
2.发现json_encode()
数组之后返回false
调试,使用json_last_error()
函数获取错误码为5
即对应为JSON_ERROR_UTF8
,说明数据里有非utf8
的字符,是传入了一些不正常的字符吗?但就算不正常的字符也会被urlencode()
然后存起来,所以应该不是数据内容有错误。
3.发现json_encode()
之前的数组里有特殊的字符�
,在对比content_bak数据看,原因基本已经确定。
因为content
,content_bak
这两个字段是使用TEXT(MySql)
存的,由于此次数据非常长urlencode()
之后,长度早已超出TEXT的最长长度65535
,所以只存到了urlencode()
之后字符串的第65535位置,截取了半个字符,所以在json_encode()
时出现了JSON_ERROR_UTF8
这种错误。
3 解决
修改字段类型就可以了从TEXT
改为参照下表
网友评论