什么是 BOM头以及如何去掉

什么是 BOM头?

类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但对于 PHP来说,BOM是个大麻烦。

  PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。根据嵌入式语言的特点,这串字符将被直接执行(显示)出来。由此造成即使页面的 top padding 设置为0,也无法让整个网页紧贴浏览器顶部,因为在html一开头有这3个字符呢!

=================================================================================================

如何去掉?

1、editplus去BOM头的方法

编辑器调整为UTF8编码格式后,保存的文件前面会多出一串隐藏的字符(也即是BOM),用于编辑器识别这个文件是否是以UTF8编码。 运行Editplus,点击工具,选择首选项,选中文件,UTF-8标识选择 总是删除签名,

然后对PHP文件编辑和保存后的PHP文件就是不带BOM的了。

2、ultraedit去除bom头办法

打开文件后,另存为选项的编码格式里选择(utf-8 无bom头),确定就ok了

怎么样,去掉bom头很简单吧

3、专门写的去除文件BOM头的程序,现在公布出来,可以放在项目根目录,然后运行。

<?php
if (isset($_GET[‘dir‘])){ //设置文件目录
$basedir=$_GET[‘dir‘];
}else{
$basedir = ‘.‘;
}
$auto = 1;
checkdir($basedir);
function checkdir($basedir){
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file != ‘.‘ && $file != ‘..‘){
if (!is_dir($basedir."/".$file)) {
echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";
}else{
$dirname = $basedir."/".$file;
checkdir($dirname);
}
}
}
closedir($dh);
}
}
function checkBOM ($filename) {
global $auto;
$contents = file_get_contents($filename);
$charset[1] = substr($contents, 0, 1);
$charset[2] = substr($contents, 1, 1);
$charset[3] = substr($contents, 2, 1);
if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
if ($auto == 1) {
$rest = substr($contents, 3);
rewrite ($filename, $rest);
return ("<font color=red>BOM found, automatically removed._<a href=http://blog.csdn.net/s394032675>csdn.net</a></font>");
} else {
return ("<font color=red>BOM found.</font>");
}
}
else return ("BOM Not Found.");
}
function rewrite ($filename, $data) {
$filenum = fopen($filename, "w");
flock($filenum, LOCK_EX);
fwrite($filenum, $data);
fclose($filenum);
}
?>

再来一段议论utf8的BOM信息的
BOM是指php文件本身的存储方式为带BOM的UTF-8,普通页面的中文乱码方式一般不是由这个原因导致的。

header("Content-type: text/html; charset=utf-8");
这句话控制html输出页面的编码方式,

BOM只有在WINDOWS下采用“记事本”存储为UTF-8时才会有,这个可以用WINHEX把开始的2个字节删掉。
在dreamweaver里面编码设置里面可以设置是否带BOM,一般只要php输出的不是图片(GDI Stream),BOM都不会导致问题。
GDI Stream如果开头有了额外的 字符就会显示为 红叉。

时间: 2024-10-02 01:32:39

什么是 BOM头以及如何去掉的相关文章

使用editplus等编程工具时UTF-8编码去掉BOM头方法(转载备查)

Unicode规范中有一个BOM的概念.BOM--Byte Order Mark,就是字节序标记.在这里找到一段关于BOM的说明: 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF.而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中.UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE".这样如果接收者收到FEFF,就表明这个字节流是Big-Endia

关于JSON解析的深坑之BOM头

    前言:在我们对Json字符串进行处理时,往往会碰到这个问题org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject,解析服务器返回的Json串时,JSONObject对象抛出了这个异常.其实这是返回的Json字符串含有BOM头导致的. 本人手拙,写的不好.望各位大虾见谅!!! 什么是JSON?  JSON(JavaScript Object Notation) 是一种轻

关于PHP的BOM头

一直用的是wamp的环境,php的版本还停留在5.3.php7都出来了,我连php5.6都还没用一把,很多相对于5.3时代的新函数和特性都还没体验到.但是碍于懒,决定装phpstudy切换到5.6的版本体验一把. 原先的wamp环境下mysql是没有登录密码的,但是phpstudy默认有个密码,所以我需要去我目前的项目框架配置项里改一下数据库的连接密码,心想就是改个密码嘛犯不着开sublime了,直接用记事本给改了.然后打开我的项目,首页出来了,没啥问题,再点登录,哎?验证码咋不出来了?用fir

nootpad++去除bom头

用thinkcmf写的一个网站,上传到服务器后,出现顶部有一条高20px左右的空白,审查后发现有一串数字,就是bom头,解决方法: 一.用dw新建一个html或者php文件,覆盖掉想要去掉bom头的文件 二.下载nootpad++,新建一个文件,编码格式选utf-8 无bom头 格式,覆盖掉之前的文件即可,head,nav,footer,list页面都有可能产生bom头

bom头的问题

JAXB将xml文件转化为java对象时出现了问题,用ue编写修改的xml文件加入了bom头,导致解析出现问题.但log4j解析带bom头的xml文件就不会有问题. 什么是bom头?在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码.现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因了. 去掉bom头的办法,简单的是下面两种:1.editplus去BOM头的方法编辑器调

由于BOM头导致的Json解析出错

上周五改完一些BUG后,测试通过就安心在家过了个周末.结果周一回来一看,整个安卓APP所有的接口都挂掉了1.查找bug 首先想到的是客户端代码有问题,然后想起来上周五还能运行得好好的手机也是同样的错误,看日志是JSON解析错误. 细看也没看出来什么问题来,后来把服务器返回的JSON串在BeJson上做校验也是未通过. 后来群里的朋友说让我把字符串转成16进制应该能看出问题来,转换后果然在第一个大括号的前边多了一个16进数,搜索发现那个16进制数是BOM头 2.解决bug 去掉json串中的BOM

php工程部署在centos系统,产生页面布局错乱、点击按钮和链接无响应的解决办法(去BOM头)

1.UTF-8 BOM 可能导致CSS样式错乱: utf-8 是一种在web应用中经常使用的一种 unicode 字符的编码方式,使用 utf-8 的好处在于它是一种变长的编码方式,对于 ANSII 码编码长度为1个字节,这样的话在传输大量 ASCII 字符集的网页时,可以大量节约网络带宽. 使用 utf-8 编码来编写网页的时候, 往往会因为 bom (Byte Order Mark) 的问题,导致网页中经常出现一些不明的空行或者乱码字符. 这些都是因为 utf-8 编码方式对于 bom 不是

微软平台文件编码兼容Unix不生成BOM头

遇到一个问题,.NET后台生成HTML到了Linux上就会多出一行乱码,样式会乱,查原因是因为.NET运行在windows平台,生成UTF-8会自动加一个BOM头. 去掉BOM其实关键代码就这么一行 System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding(false);                StreamWriter sw = new StreamWriter(nFile,utf8); 下面2个文件是去掉的和未去掉的,其中

什么是BOM头

什么是BOM头? BOM头是放在UTF-8编码的文件的头部的,占用三个字节,用来标识该文件属于UTF-8编码.现在已经有很多软件识别BOM头,但是还有些不能识别BOM头,比如PHP就不能识别BOM头,这也是用记事本编辑UTF-8编码后执行就会出错的原因了. 如何去掉BOM头? 去掉BOM头的办法,最简单就是使用editplus或ultraedit等软件来操作.具体展示如下: 1.使用editplus去除BOM头 编辑器调整为UTF8编码格式后,保存的文件前面会多出一串隐藏的字符(也即是BOM),