最近项目使用到ThinkPHP框架,其中一个页面顶部老是一小段空白。php
以下图所示:html
并且只会在chrome和edge浏览器出现,ff则不会出现这个问题。因为该页面是由PHP+HTML模板拼接接,所以前后排查了html文件、JavaScript文件、php文件。均未发现问题。chrome
使用chrome F12发现空白处是一串字符。经过搜索,了解到这原来是UTF-8的编码问题。windows
我使用的编码是UTF-8 + BOM,这种编码方式通常会在windows操做系统中出现,好比WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于通常的文件,这样并不会产生什么麻烦。但对于 PHP来讲,BOM是个大麻烦。由于PHP并不会忽略BOM,因此在读取、包含或者引用这些文件时,会把BOM做为该文件开头正文的一部分。根据嵌入式语言的特色,这串字符将被直接执行(显示)出来。浏览器
知道问题的缘由以后,便很好解决了。我使用的是 phpstorm,在菜单栏文件里有“remove bom”选项,能够直接存为UTF-8无BOM模式。若是使用notepad++或其余工具的也能够选择“另存为”,而后在编码那儿选择“UTF-8无BOM”便可解决。框架