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

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

PHP json_encode返回的json前端获取时出现unicode转码和反斜杠\导致无法解析的解决办法_第1张图片

(截图只贴了一部分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字符串前面出现的空格数,还真跟接口文件头部没顶格留下的空格数一样,我戳~
不知道是不是只有新手才会出现这个问题,还是写下来作为记录吧,以防后面再犯。
 
  
 
  

你可能感兴趣的:(PHP,JSON)