最近開發 WordPress 主題的時候,發現網頁在 IE 瀏覽器下居然不居中,同時導致 CSS 背景位置移位。但是在非 IE 核心的瀏覽器如谷歌、火狐下一切正常。首先想到的是 doctype 宣告,但是檢視發現宣告沒有問題。是什麼原因導致的呢?
這個問題我以前也碰到過,於是回憶以前的解決辦法。懷疑是編碼問題。於是使用 editplus 開啟,另存為發現是 utf-8+bom 。改為 utf-8,儲存,詭異的不居中,竟然正常了。
可以這個 bom 是導致 doctype 失效的罪魁禍首,於是搜尋 bom 這個東東:
Unicode 規範中有一個 BOM 的概念。 BOM——Byte Order Mark,就是位元組序標記,也就是簽名。 UTF-8 不需要 BOM 來表明位元組順序,但可以用 BOM 來表明編碼方式。字元”ZERO WIDTH NO-BREAK SPACE” 的 UTF-8 編碼是 EF BB BF 。所以如果接收者收到以 EF BB BF 開頭的位元組流,就知道這是 UTF-8 編碼了。 Windows 就是使用 BOM 來標記文字檔案的編碼方式的。雖然簽名有許多好處,但在實際情況中,很多軟體是不認這個簽名的,比如我們寫的 java 程式,有時編輯儲存一下 XML 檔案後,程式就不認它了,主要原因就是因為 BOM 的原因。
所以,我們選擇網頁編碼的時候一定要選擇 utf-8,而不是 utf-8+bom 。實際上,bom 會產生一些多餘的空格。