提示
采用UTF-8編碼的用戶(hù)請勿使用記事本對代碼文件及模板文件進(jìn)行編輯,使用可以去掉 Unicode 簽名(BOM)的工具進(jìn)行編輯。如果您的網(wǎng)站打開(kāi)一片空白、樣式丟失、程序報錯很可能是您使用了未能去掉BOM的工具對模板文件或源碼文件進(jìn)行了修改。
現在幾乎所有的文本編輯軟件都可以顯示并編輯UTF-8編碼的文件。但是很遺憾,其中很多軟件的表現并不理想。
類(lèi)似WINDOWS自帶的記事本等軟件,在保存一個(gè)以UTF-8編碼的文件時(shí),會(huì )在文件開(kāi)始的地方插入三個(gè)不可見(jiàn)的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隱藏的字符,用于讓記事本等編輯器識別這個(gè)文件是否以UTF-8編碼。對于一般的文件,這樣并不會(huì )產(chǎn)生什么麻煩。但對于 PHP來(lái)說(shuō),BOM是個(gè)大麻煩。
PHP并不會(huì )忽略BOM,所以在讀取、包含或者引用這些文件時(shí),會(huì )把BOM作為該文件開(kāi)頭正文的一部分。根據嵌入式語(yǔ)言的特點(diǎn),這串字符將被直接執行(顯示)出來(lái)。由此造成即使頁(yè)面的 top padding 設置為0,也無(wú)法讓整個(gè)網(wǎng)頁(yè)緊貼瀏覽器頂部,因為在html一開(kāi)頭有這3個(gè)字符呢!
最大的麻煩還不是這個(gè)。受COOKIE送出機制的限制,在這些文件開(kāi)頭已經(jīng)有BOM的文件中,COOKIE無(wú)法送出(因為在COOKIE送出前PHP已經(jīng)送出了文件頭),所以登入和登出功能失效。一切依賴(lài)COOKIE、SESSION實(shí)現的功能全部無(wú)效。
因此
在編輯、更改任何文本文件時(shí),請務(wù)必使用不會(huì )亂加BOM的編輯器。Linux下的編輯器應該都沒(méi)有這個(gè)問(wèn)題。WINDOWS下,請勿使用記事本等編輯器。推薦的編輯器是: Editplus 2.12版本以上; EmEditor; UltraEdit(需要取消'添加BOM'的相關(guān)選項); Dreamweaver(需要取消'添加BOM'的相關(guān)選項)等。
對于已經(jīng)添加了BOM的文件,要取消的話(huà),可以用以上編輯器另存一次。(Editplus需要先另存為gb,再另存為UTF-8。)
在Dreamweaver 里可以去掉Unicode 簽名(BOM),點(diǎn)菜單欄里的修改 -> 頁(yè)面屬性,或直接按 Ctrl+J 快捷鍵。
