在windows环境下,用记事本打开一个utf-8格式的php文件,保存后,运行php就会报莫名其妙的错误,查了半天也没有找到原因,最后才查出是因为保存文件时自动加上了BOM头信息,(含BOM头的文件多出三个字节 efbbbf),当运行了添加BOM头信息的php程序时就会报错。
什么是BOM头信息?
字节顺序标记(英语:byte-order mark,BOM)是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的记号。
字符U+FEFF如果出现在字节流的开头,则用来标识该字节流的字节序,是高位在前还是低位在前。如果它出现在字节流的中间,则表达零宽度非换行空格的意义,用户看起来就是一个空格。从Unicode3.2开始,U+FEFF只能出现在字节流的开头,只能用于标识字节序,就如它的名称——字节序标记——所表示的一样;除此以外的用法已被舍弃。取而代之的是,使用U+2060来表达零宽度无断空白。