BOM

隱藏字元

BOM(Byte Order Mark),位元組順序標記,出現在文本文件頭部,Unicode編碼標準中用於標識文件是採用哪種格式的編碼。

BOM採用UTF-8編碼,幾乎所有的文本編輯軟體都可以顯示並編輯UTF-8編碼的文件,但是很遺憾,其中很多軟體的表現並不理想。

目錄

正文


如果您在修改任何PHP文件后發生:
* 不能登入或者不能登出;
* 頁頂出現一條空白;
* 頁頂出現錯誤警告;
* 其它不正常的情況。
則多半是編輯器的問題。
類似Windows自帶的記事本等軟體,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字元(0xEF 0xBB 0xBF,即BOM)。它是一串隱藏的字元,用於讓記事本等編輯器識別這個文件是否以UTF-8編碼。對於一般的文件,這樣並不會產生什麼麻煩。但對於PHP來說,BOM是個大麻煩。
PHP並不會忽略BOM,所以在讀取、包含或者引用這些文件時,會把BOM作為該文件開頭正文的一部分。根據嵌入式語言的特點,這串字元將被直接執行(顯示)出來。由此造成即使頁面的Top Padding設置為0,也無法讓整個網頁緊貼瀏覽器頂部,因為在html一開頭有這3個字元呢!
最大的麻煩還不是這個,受Cookie送出機制的限制,在這些文件開頭已經有BOM的文件中,Cookie無法送出(因為在Cookie送出前PHP已經送出了文件頭),所以登入和登出功能失效。一切依賴Cookie、SESSION實現的功能全部無效。
因此,在編輯、更改任何文本文件時,請務必使用不會亂加BOM的編輯器,Linux下的編輯器應該都沒有這個問題。Windows下,請勿使用記事本等編輯器。推薦的編輯器是:Editplus 2.12版本以上,EmEditor,UltraEdit(需要取消‘添加BOM’的相關選項),Dreamweaver(需要取消‘添加BOM’的相關選項)等。對於已經添加了BOM的文件,要取消的話,可以用以上編輯器另存一次。(Editplus需要先另存為gb,再另存為UTF-8)不過有時候不會顯。