使用 PHP 函数或者软件去除文件的 BOM 头字符

有时候在编写网页的时候,网页的头部会莫名其妙的出现一行空行,但是在文件里面并没有任何的字符。用 PHP 生成验证码,在本地测试都没有问题,传到服务器上面图片却是一个红色 X,其实这些多半都是文件 BOM 在作怪,几天就给大家分享一下,什么是文件的 BOM 头,PHP 如何批量去除 BOM 头的方法。

什么是BOM头

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

PHP

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

其他软件

Windows 编辑器如果保存为 Utf8 文件就会帮你加上BOM头,以告诉其他编辑器以 Utf8 来显示字符,现在已经有很多软件识别 BOM 头。

但是在网页上并不需要添加 BOM 头识别,因为网页上可以使用 header 头指定 charset=utf8 告诉浏览器用 utf8 来解释。

除去BOM头

去掉 BOM 头的办法,最简单就是使用 editplus 或 ultraedit 等软件来操作,但是如果文件很多的话,而你又是使用的 PHP 作为开发语言,下面的这个方法可能比较适合你。

软件方法

使用 EditPlus 去除BOM头

编辑器调整为 UTF8 编码格式后,保存的文件前面会多出一串隐藏的字符(也即是BOM),用于编辑器识别这个文件是否是以 UTF8 编码。

运行 Editplus,点击工具,选择首选项,选中文件,UTF-8 标识选择总是删除签名,然后对 PHP 文件编辑和保存后的 PHP 文件就是不带 BOM 的了。

使用 UltraEdit 去除 BOM 头

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

使用 Notepad++ 去除 BOM 头

使用 Notepad++ 打开需要去除 BOM 头的文件,在菜单栏找到格式,点击 转化为 Utf-8 无 BOM 编码格式,然后保存文件即可。

使用 Notepad++ 去除 BOM 头

PHP 函数方法

PHP 中有专门去除这类字符的函数,不过这个无法遍历子文件夹,只针对当前文件夹里面的文件,可以去除 JS、CSS、HTML、PHP 和 TXT 文件里面的 BOM 头字符。

/*清除rom*/

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);

}

}

}//end while

closedir($dh);

}//end if($dh

}//end function

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.</font>";

}else{

return ("<font color=red>BOM found.</font>");

}

}

else return ("BOM Not Found.");

}//end function

function rewrite($filename, $data){

$filenum = fopen($filename, "w");

flock($filenum, LOCK_EX);

fwrite($filenum, $data);

fclose($filenum);

}

使用方法

将上面的代码保存一个临时文件,比如 remove-bom.php,然后上传到服务器,然后通过网址访问这个文件即可。

以上是 使用 PHP 函数或者软件去除文件的 BOM 头字符 的全部内容, 来源链接: utcz.com/p/232009.html

回到顶部