一、出现问题
1、今天在接中转接口时突然发现返回的数据多了三个字符,使用在线JSON校验工具时发现数据前面多了个小红点
2、刚以为是本地代码CURL的问题,后来经过检测发现不是本地代码的问题,使用在线HTTP请求发现依旧会携带\ufeff(小红点)问题,初步排除是本地代码问题,只可能是接口端问题。
3、经过百度查询,发现有很多同僚遇到相同的问题,主要是引入的文件或请求接口的文件编码格式是UTF-8带有BOM的文件,因为使用的TP框架,也不知道具体是哪个文件问题。
二、解决办法
1、治标不治本:
使用trim()方法将BOM清除
2、治本
找到带有BOM的文件,用notepad++工具转换成不带有BOM的文件
在linux下可以通过下面两条命令查找带BOM格式文件和将文件转换成无BOM格式:
# 在项目根目录,查找项目中带BOM格式文件并显示
grep -r -I -l $'^\xEF\xBB\xBF'.
/# 在存在BOM格式文件的目录,将目录下所有文件去除BOM头
# (注意:不能对图片进行此操作,否则会导致图片打不开)
find . -typef -execsed -i's/\xEF\xBB\xBF//'{} \;
-----------------------------------------------------------------------------------------------------------------------------------------
我的刚解决了,原来是在配置文件中有两个文件的编码是UTF-8带有BOM的,使用notepad++进行文件转编码后,咦,问题解决了。哈哈哈,高兴,各位如果也发生这种事情,先去看看配置文件是不是也有带有BOM的文件。
三、附录
1、PHP在5.2之后默认的都是不带有BOM的文件,在使用json_decode()的时候如果是返回带有BOM的数据,json_deconde()将会返回null
网友评论