鍍金池/ 問答/HTML5  PHP  網(wǎng)絡(luò)安全/ api 調(diào)用返回的json中帶有BOM頭

api 調(diào)用返回的json中帶有BOM頭

我用同一個(gè)方法向api1發(fā)起請求返回的json字符串中帶有BOM頭導(dǎo)致json_decode,但是我用同一個(gè)方法向api2發(fā)起請求返回的就不帶,可以正常用json_decode解析,那么api1到底是做了什么事情添加了BOM頭??
去除的方法倒是找了很多,但是我想知道api1這個(gè)bom是怎么產(chǎn)生的

回答
編輯回答
乖乖噠

https://github.com/emrahgundu...
github上bom頭清除的一個(gè)腳本,放在網(wǎng)站根目錄下,訪問就可以批量清除掉所有的bom頭

2018年7月27日 18:29
編輯回答
朕略傻

一般用windows的記事本編輯過然后保存就會產(chǎn)生

2017年5月11日 06:34
編輯回答
初心

建議api做bom過濾

2017年6月21日 12:15
編輯回答
絯孑氣

檢查 api1 那個(gè)文件。

2017年1月24日 23:30
編輯回答
不討囍

編輯API1
用 Notepad++

Notepad++ ->格式,選中叫 以UTF-8 無BOM格式編碼->保存

單文件上面解決,批量可以用命令。
采納并解決也不給分,一個(gè)preg_replace寫好了,還自己根據(jù)我的方案寫個(gè)假方法不打算給分,下次不回了。看評論

[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]

2017年5月25日 16:39
編輯回答
風(fēng)畔
  • 不管是把a(bǔ)pi1中的文件刪了重新用編輯器寫過,還是說用編輯器設(shè)置編碼格式,最終我在調(diào)用api1時(shí)返回的結(jié)果還是有bom頭,由于怕影響整站沒有用 @dawnblog 提供的方法,但是依舊表示感謝。
  • 最后為了能處理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;
}

感謝各位幫助

2017年6月26日 19:31