为了账号安全,请及时绑定邮箱和手机立即绑定

api 调用返回的json中带有BOM头

/ 猿问

api 调用返回的json中带有BOM头

API
白衣染霜花 2018-07-24 22:14:41

我用同一个方法向api1发起请求返回的json字符串中带有BOM头导致json_decode,但是我用同一个方法向api2发起请求返回的就不带,可以正常用json_decode解析,那么api1到底是做了什么事情添加了BOM头??
去除的方法倒是找了很多,但是我想知道api1这个bom是怎么产生的

查看完整描述

3 回答

?
撒科打诨

编辑API1
用 Notepad++

Notepad++ ->格式,选中叫 以UTF-8 无BOM格式编码->保存

单文件上面解决,批量可以用命令。
采纳并解决也不给分,一个preg_replace写好了,还自己根据我的方案写个假方法不打算给分,下次不回了。看评论

[GREP]

find . -type f -exec sed '1s/^\xEF\xBB\xBF//' -i {} \;


grep -rl $'\xEF\xBB\xBF' .


[PERL]

perl -e 's/\xef\xbb\xbf//;' -pi~ file.js


[PHP]

function removeBOM ($contents) {

    $packed = pack("CCC",0xef,0xbb,0xbf);

    return preg_replace('/'.$packed.'/','',$contents);

}

[签名:98sky.com]


查看完整回答
反对 回复 2018-07-29
?
DIEA

https://github.com/emrahgundu...
github上bom头清除的一个脚本,放在网站根目录下,访问就可以批量清除掉所有的bom头

查看完整回答
反对 回复 2018-07-29
?
天天世纪
  • 不管是把api1中的文件删了重新用编辑器写过,还是说用编辑器设置编码格式,最终我在调用api1时返回的结果还是有bom头

  • 最后为了能处理api1和api2的返回值,我的做法是在接收端的反馈值做了trim_bom的处理。

<?php

function trim_bom(string $string) {

    if (!$string) {

        return $string;

    }

    $charset[1] = substr($string, 0, 1);

    $charset[2] = substr($string, 1, 1);

    $charset[3] = substr($string, 2, 1);


    if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {

        $string = substr($string, 3);

    }


    return $string;

}


查看完整回答
反对 回复 2018-07-29

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信