• PHP json_encode返回的json前端获取时出现unicode转码和反斜杠导致无法解析的解决办法


    今天用PHP写一个接口文件出现了一个非常奇葩的问题,首先我的json字符串绝对没有问题,然后使用json_encode编码后echo出去作为接口的返回值。前端使用JS获取接口返回的json对象时,返回的是一个字符串,不是Object(正常应该返回JSON的Object)。而且这个字符串还被Unicode转码过。

    (截图只贴了一部分json值)
    我以为Unicode转码的问题,就在网上找了一些文章看看,可以通过

    json_encode("中文", JSON_UNESCAPED_UNICODE);
    或者
    
    
    mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE")
    等方法不让json_encode转码或者如果转码了想办法解码。
    我使用了上述的办法依然无法解决我出现的问题。我的问题有几个奇葩点:
    1、我的json字符串格式绝对没有问题;
    2、我写了很多接口,接口文件的模板格式都是一致的,为什么其它接口文件没有问题,偏偏这个有问题;
    3、我的开发环境在windows,使用XAMPP环境,PHP版本是5.6.28,这个接口在windows下执行没有问题;
    4、我的生产环境是Linux,PHP版本5.4,出现了这个问题。
    就是因为这个原因很奇葩,搞的我一个上午各种查资料才解决问题,而且导致问题的原因也很简单和奇葩。
    
    
    仔细看看返回值,除了返回的是一个字符串不是Object之外,在json值之前有一些空格,但是不知道这个空格哪来的,导致JSON解析失败。又在网上查找一通,大部分人说因为BOM的原因,但是为啥发布到Linux之后其它接口文件没有出现,而这个接口文件就有这个问题。所以我肯定不是BOM问题。最后终于定位了问题:代码文件要顶格写代码(心中一万个草泥马飞过……)
    
    
    看到上图中的第一行代码没,一定要顶格写,不要在代码文件开头留下空格。之所以我会出现这个问题是,我在这个文件全选了所有文字,并使用eclipse的format功能格式化了一下代码格式,就没留意这个小细节。而且代码不顶格在windows下执行是没有问题的,但是在Linux环境下就出现了问题,也可能是PHP版本的问题,这个没有细究。
    今天也算是长见识了,从来没想过代码不顶格写,会导致json返回值错误,而且数一数前端返回的json字符串前面出现的空格数,还真跟接口文件头部没顶格留下的空格数一样,我戳~
    不知道是不是只有新手才会出现这个问题,还是写下来作为记录吧,以防后面再犯。
    
    
    
    
    

    原文: https://blog.csdn.net/wangyuchun_799/article/details/74390726

  • 相关阅读:
    修改mysql的时间/时区
    vue 3.0一些理解
    关于css中常用几种选择器的整理
    docker中MySQL8.0登录提示caching_sha2_password问题解决方法
    java请求url返回json
    weblogic11G 修改密码
    每天一个小知识
    出一套柠檬班测试开发视频(百度网盘)
    JAVA自动化,使用UIAutomator定位
    JAVA自动化,解决Appium无法输入中文问题
  • 原文地址:https://www.cnblogs.com/dereckbu/p/9698790.html
Copyright © 2020-2023  润新知