Zao's Blog
感谢上天,我不是一个人在战斗!
九月
18

在修改本blog现在所用的模板(Dawntree)时,因为我把blog的编码设成UTF-8了,需要将所有模板文件由原来的ANSI编码转换为UTF-8的,否则汉字就显示为乱码了。我一直习惯于用“另存为”的方法来转换编码格式,方便快捷,屡试不爽。

而这次,终于出问题了!我把转换好的文件上传,然后用分别用Opera、Firefox、IE测试(用浏览器测试网页是制作网页的一个必经步骤),发现模板在Opera、Firefox这两个公认比较符合W3C标准的浏览器下均显示正常,反而在IE这个公认最不规范的浏览器中却有好几个问题:右边侧边栏变窄了,使边框有一半没有显示,十分难看;浏览器顶部无缘无故多出一行空白。

开始我以为是html的DTD声明的问题,但改了 后问题仍然未解决。于是我想,可能是IE的bug吧,反正IE的bug我也见得多了,hack也收集了不少,嘻嘻……虽然hack有违W3C的精神,但鉴于自己技术有限,只能先用着 了。我用*+html, * html {}这个仅能对IE起作用的css代码来处理,发现侧边栏的宽度问题解决了,而顶部的空白却怎么也去不掉!我将html、body标签的padding、margin都设为零也没有用。后来用IE开发者工具栏(Internet Explorer Developer Toolbar)查看网页样式,发现 head标签在IE的解析下包含一个title标签,而把本来应该属于head的meta标签都归到了body里!问题应该就在这里了。然而我明明将meta放在head里的啊,而且是放在title之前!怎么IE会这样处理的?

上网搜索了很久,中英文的都搜索了,终于发现可能与UTF-8的BOM(Byte Order Mark)有关!网上说:“微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节, windows上面的notepad等程序就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的, 然而这个只是微软暗自作的标记, 其它平台上并没有对UTF-8文本文件做个这样的标记。” 当用php把它include进去的时候,就可能发生问题。

于是,我把所有模板的文件重新保存为UTF-8格式,但保存的时候去掉保存选项里的“添加Unicode签名(BOM)”,然后把前面加的hack去掉,问题终于解决!

一条评论 | 发表你的评论

完全吾明。。一-一!

发表评论





改变评论框高度:增大(+) | 减小(-)