某日,用记事本给小站的function.php修改了一点内容,修改完之后,用浏览器打开看看,网页的Header居然向下移位了?
上图蓝圈处
我:????
通过F12键查看,发现在页面中多出了一个奇奇怪怪的东西:****
右键选择Edit as HTML,手工删除之后,Header果然移回去了。再次刷新页面,Header又出现异常状况。看来这就是罪魁祸首。
那么,这个****究竟是何方神圣呢?
还记得刚刚提到,我用的是记事本来编辑的代码吗?
Windows的记事本,会在神不知鬼不觉的情况下,给文件添加BOM头,他原本是出于好意,让记事本可以隐式选择文件编码,从而正确显示文件内容。
这个的出发点是好的,但问题在于,并不是所有的软件都认得这个BOM头,因此就会出现问题:
字符 “Zero Width No-Break Space” 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节流,就知道这是 UTF-8编码了。Windows 就是使用 BOM 来标记文本文件的编码方式的。
PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。根据嵌入式语言的特点,这串字符将被直接执行(显示)出来。由此造成即使页面的 top padding 设置为0,也无法让整个网页紧贴浏览器顶部,因为在html一开头有这3个字符呢!
解决方法很简单,例如使用Notepad2来清除BOM:
修改前
双击“UTF-8 Signature”,在弹出的窗口中,选择“UTF-8”,并保存
修改后
经过这样修改,由于没有了BOM头占位置,Header(甚至整个页面)就不会移位了