最近开发 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 会产生一些多余的空格。