詳解BOM頭以及去掉BOM頭的方法

TopCoder.NET發表於2018-01-10

    類似WINDOWS自帶的記事本等軟體,在儲存一個以UTF-8編碼的檔案時,會在檔案開始的地方插入三個不可見的字元(0xEF 0xBB 0xBF,即BOM)。它是一串隱藏的字元,用於讓記事本等編輯器識別這個檔案是否以UTF-8編碼。對於一般的檔案,這樣並不會產生什麼麻煩。但對於 PHP來說,BOM是個大麻煩。

  PHP並不會忽略BOM,所以在讀取、包含或者引用這些檔案時,會把BOM作為該檔案開頭正文的一部分。根據嵌入式語言的特點,這串字元將被直接執行(顯示)出來。由此造成即使頁面的 top padding 設定為0,也無法讓整個網頁緊貼瀏覽器頂部,因為在html一開頭有這3個字元呢!

     window編輯器如果儲存為utf8檔案就會幫你加上BOM頭,以告訴其他編輯器以utf8來顯示字元

但是在網頁上並不需要新增BOM頭識別,因為網頁上可以使用 head頭 指定charset=utf8告訴瀏覽器用utf8來解釋.但是你用window自動的編輯器,編輯,然後有顯示在網頁上這樣就會顯示出0xEF 0xBB 0xBF這3個字元。

 

解決方法:網頁上就需要去除0xEF 0xBB 0xBF,可以使用editplus 選擇不帶BOM的編碼,這樣就可以去除了

1: editplus去BOM頭的方法

編輯器調整為UTF8編碼格式後,儲存的檔案前面會多出一串隱藏的字元(也即是BOM),用於編輯器識別這個檔案是否是以UTF8編碼。執行Editplus,點選工具,選擇首選項,選中檔案,UTF-8標識選擇 總是刪除簽名,然後對PHP檔案編輯和儲存後的PHP檔案就是不帶BOM的了;

2、ultraedit去除bom頭辦法

開啟檔案後,另存為選項的編碼格式裡選擇(utf-8 無bom頭),確定就ok了

附:再來一段議論utf8的BOM資訊的
BOM是指php檔案本身的儲存方式為帶BOM的UTF-8,普通頁面的中文亂碼方式一般不是由這個原因導致的。

header("Content-type: text/html; charset=utf-8");
這句話控制html輸出頁面的編碼方式,

BOM只有在WINDOWS下采用“記事本”儲存為UTF-8時才會有,這個可以用WINHEX把開始的2個位元組刪掉。
在dreamweaver裡面編碼設定裡面可以設定是否帶BOM,一般只要php輸出的不是圖片(GDI Stream),BOM都不會導致問題。
GDI Stream如果開頭有了額外的 字元就會顯示為 紅叉。

相關文章