因為 Dansion 師兄的驅使,開始 Dreamweaver 征途。不過很少有人關注到,在 Dreamweaver 中使用 utf-8 編碼保存時,默認會有 "Unicode 標准化表單" 和 "包括 Unicode 簽名 (BOM)" 兩個選項,在頁面屬性裡也可以看到:
如果 "包括 Unicode 簽名" 選項被勾選,會產生稀奇古怪的頁面渲染問題。
什麼是 Unicode 簽名 (BOM)?
BOM (Byte Order Mark) 是 UTF 編碼方案裡用於標識編碼的標准標記。位於文本文件開頭的 2 到 4 個字節,可將文件標識為 Unicode,還標識後面字節的字節順序。由於 UTF-8 沒有字節順序,因此可以選擇添加 UTF-8 BOM。對於 UTF-16 和 UTF-32,這是必需的。
由於這個 BOM 的存在,PHP 會誤認為文本內容已經輸出,因此會對頁面渲染造成影響。據說 PHP6 中已經修復這個問題。
如何防止 Unicode 簽名 (BOM) 對頁面渲染的影響?
以 Dreamweaver 為例,保存 utf-8 編碼的文檔時,不勾選 "包括 Unicode 簽名 (BOM)" 選項即可。