美文网首页
http不返回数据,是超出了nginx返回的长度限制?还是有其他

http不返回数据,是超出了nginx返回的长度限制?还是有其他

作者: Zeaone | 来源:发表于2019-03-21 15:06 被阅读0次

    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数据看,原因基本已经确定。
    因为contentcontent_bak这两个字段是使用TEXT(MySql)存的,由于此次数据非常长urlencode()之后,长度早已超出TEXT的最长长度65535,所以只存到了urlencode()之后字符串的第65535位置,截取了半个字符,所以在json_encode()时出现了JSON_ERROR_UTF8这种错误。

    3 解决

    修改字段类型就可以了从TEXT改为参照下表

    MySql中TEXT的种类

    相关文章

      网友评论

          本文标题:http不返回数据,是超出了nginx返回的长度限制?还是有其他

          本文链接:https://www.haomeiwen.com/subject/stnqvqtx.html