BOM: Byte Order Mark
UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉弱编辑器(记事本)当前文件采用何种编码,方便编辑器识别。
PHP在设计之初,没有考虑到BOM头的问题,因此很容易因为BOM头引发诡异的问题,比如编码转换失败,样式错乱等等问题,而且此问题相当隐蔽,很难确定发生问题的文件(试想在没有工具的情况下从上万的工程文件中找到哪个文件带有BOM头)。
BOM头是隐藏字符,非编辑字符,就像普通空文件一样,当我们写<?php的时候其实之前已经加了BOM头,如下(file.php):
- {BOM头}<?php
- .....
当file.php被其他文件包含时,由于BOM头在php标签外,会当作输出内容输出到浏览器,然后引发问题(如果用gbk察看 会看到三个乱码的字符)。
所以我们在开发过程中,得创建不包含BOM头的UTF8文件,具体见编辑器设置。对于上传文件,用代码截取BOM头即可
- if ( substr( $data, 0, 3 ) == "\xEF\xBB\xBF" ){
- $data=substr_replace( $data, '', 0, 3 ) ;
注意:在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。
相关推荐
UTF8BOM转换工具
C#写入文件加上bom头,主要适用于utf8文件
批量utf文件转utf8-bom
文件的编码格式需要转换,gb2312,utf,utf-8等编码格式的相互转换等
去除bom头小工具,工具使用方法: 选择要遍历的文件夹,输入相应的文件格式,程序会遍历此文件夹下所有相应格式文件,包括子文件夹下的文件删除其BOM头 勾选ANSI转为UTF-8,则会将相应格式但编码为GB2312,GBK,GB...
utfbom 检测BOM并根据需要移除
1.首先介绍一下本人应用场景,qt...3.此小工具主要针对utf-8编码文件,能够批量添加删除BOM,无识别转化ASIIC功能,添加BOM时,如果文件是utf-8(BOM),则跳过,删除亦然 4.当不选中添加删除时可用于文件数量统计。
全自动识别文件编码转换成无bom头的UTF8文件 全自动识别文件编码转换成无bom头的UTF8文件
什么是BOM头?如何去除文件中的BOM头 删除文件中的BOM头,使文件变成正常的UTF8文件
我对之前的去BOM工具和需要的DLL进行了整合
对源码自动加上utf8 bom头,并修改换行符为unix换行,有windows版本和mac版本
Java解决UTF-8的BOM问题,使用“UnicodeInputStream”、“UnicodeReader”。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。 Windows就是使用BOM来...
utf8格式的 php 代码里...这个工具就是专门用来删除utf8文件里的bom的。 把文件或者目录拖到工具的主窗口上,他就能自动遍历所有文件,找出带bom的文件。 然后手动判断排除不需要修改的文件,就可以一键 修复BOM 了。
开源项目-dimchansky-utfbom.zip,Package utfbom implements the detection of the BOM (Unicode Byte Order Mark) and removing as necessary.
解决PB创建UTF-8文件带BOM问题; 2.字段串直接生成XML文件。 由于项目需要,需要字符串转为XML文件,直接用Fileopen进行EncodingUTF8编码后,发现文件实际为UTF-8 BOM编码 问度娘发现有相同问题,但解决方式是利用...
php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换。
基于C写的 UTF8-无BOM转为UTF16LE UTF8-无BOM转为UTF8 UTF8转为UTF8-无BOM
能够批量对文件夹下的代码文件去除UTF-8 BOM头,还能对ASNI文件批量转换为UTF-8