蛋疼的utf8-bom

测试了一下微信小程序的登录,发现wx.request的返回无法正常地被转换为json对象。

手动加入后一直报错:

仔细一看,返回的json内容最前面有4个“小红点”,鼠标移上去显示是:\ufeff。

google了一下,是utf-8的bom,解决办法是将文件转换一下,去掉bom。

按照这篇文章的方法,发现这三个文件中包含是utf-8 bom编码:

pkcs7Encoder.php

errorCode.php

wxBizDataCrypt.php

也就是微信官方提供的数据加密、解密处理类。

让我比较费解的是,我只是在类中调用了上述三个文件中的类,并且调用也是正常,但是将结果json_encode到前端时就会包含bom。猜想造成这个的原因是那位写代码的工程师是用的windows,然后不小心插入了bom,而且自己是不会发现的。然后所有使用的它的人都悲剧了,因为php不认这几个字符。参考

因为这个问题,耗费了几乎一下午的时间,极其蛋疼。

更蛋疼的是,如果将来上面的三个类有更新(但是没更新utf-8 bom),那么今天遇到的问题还会再出现,这种问题还真是第一次遇到。

PS. 如果是用phpstorm的话,可以直接右键点击文件,然后「Remove BOM」。

PS. 观察到返回结果中“小红点”的个数,就是包含BOM的文件个数。

PS. 一不小心又掉了一坑,这次的现象是微信内浏览时页面的头部莫名出现几个“&#65279”的空字符,还是因为微信的那几个文件,有一个文件在删除bom时候漏掉了。