在windows环境下,用记事本打开任何一个文本文件,另存为utf-8格式后,这样文件就自动被加上了BOM头信息
BOM(Byte Order Mark)是一个字节顺序标签,类似一个标记,又叫签名,用来告诉编辑器当前文件采用何种编码,方便编辑器识别。除了unicode编码,一般的编码集并不会出现bom头。对于utf-16和utf-32,如果不指定bom头,解析程序就默认为ansi编码,从而出现乱码;而对于utf-8,BOM头指定与否,解析程序都可判断。
现在几乎所有的文本编辑软件都可以显示并编辑UTF-8编码的文件,但其中很多的表现并不理想。类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符0xEF、0xBB和0xBF,即BOM。对于一般的文件,这样做并不会产生麻烦。但对于 PHP来说,BOM是个大麻烦。因为PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。同时根据嵌入式语言的特点,这串字符最终将被直接执行(显示)出来。
解决方法:
首先寻找BOM头文件 输入
grep -r -I -l $'^\xEF\xBB\xBF' ./
来寻找当前文件夹以及子文件夹中带有BOM头的文件
输入以下代码来替换BOM头文件
还可以使用以下PHP脚本来检测当前文件夹中有BOM头的文件(但是不会扫描子文件夹)
使用Notepad++去除BOM头
使用Sublime去除BOM头
或者
领取专属 10元无门槛券
私享最新 技术干货