修改 dedeCMS 模板后生成网站发现页面头部莫名出现一条空白行,甚至引起了式样的错乱。查看模版代码并没有任何异常,用 firebug 查看发现问题主要是:模板文件生成 html 文件之后会在 body 开头处加入一个空白子符  ,导致页面头部会出现一个空白行。
接到"  字符"问题后,我也是百思不得其解,首先我怀疑是代码不清洁的问题,仔仔细细检查了整个模板,发现代码没有冗余的地方;后来也有想到不可见控制符的问题,但是找来找去也没发现;最后就用 Editplus 编辑器重新打开模板检查,当我重新另存为的时候发现原来页面的编码是 UTF-8 + BOM。
这种编码方式一般会在 windows 操作系统中出现,比如 WINDOWS 自带的记事本等软件,在保存一个以 UTF-8 编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以 UTF-8 编码。对于一般的文件,这样并不会产生什么麻烦。但对于 PHP 来说,BOM 是个大麻烦。因为 PHP并 不会忽略BOM,所以在读取、包含或者引用这些文件时,会把 BOM 作为该文件开头正文的一部分。根据嵌入式语言的特点,这串字符将被直接执行(显示)出来。由此造成即使页面的 top padding 设置为 0,也无法让整个网页紧贴浏览器顶部,因为在 html 一开头有这 3 个隐藏字符 !
解决办法:
遇到这种问题的解决方法就是用 Editplus 2.12 版本以上编辑器或者 EmEditor 或者 UltraEdit(需要取消'添加BOM'的相关选项)或者 Dreamweaver(需要取消'添加BOM'的相关选项)重新保存一下 utf-8 格式的文档!