UTF-8文件的BOM头的来由及去除方法

1. 什么是BOM头
        在utf-8编码文件中BOM在文件头部,占用三个字节,用来标识该文件属于utf-8编码,现在已经有很多软件识别BOM头,但还是有些不能识别BOM头,比如PHP就不能识别BOM头,这也就是用记事本编辑utf-8编码的PHP文件后,就会报错的原因。
 
2. 包含BOM头文件的产生
        在windows环境下,用记事本打开任何一个文本文件,另存为utf-8格式后,这样文件就自动被加上了BOM头信息。
        比较:
                        utf-8(含BOM头)
                        UTF-8文件的BOM头的来由及去除方法
 
                        utf-8(不含BOM头)
                        UTF-8文件的BOM头的来由及去除方法
       
        从上图的比较中,可以很明显的看出,含BOM头的文件多出三个字节 efbbbf。
 
3. BOM头信息的去除方法
        用Notepad++打开文件,选择 格式 -> 以UTF-8无BOM格式编码,再保存就行。如下图:
        UTF-8文件的BOM头的来由及去除方法
 
4. 在PHP类的项目中,自动处理BOM头信息(只需要将此文件放在项目根目录下,从浏览器访问即可)
<</font>?php

if (isset($_GET['dir'])) { //设置文件目录   
    $basedir = $_GET['dir'];
else {
    $basedir = '.';
}

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") . "
"
;
                else {
                    $dirname = $basedir . "/" . $file;
                    checkdir($dirname);
                }
            }
        }
        closedir($dh);
    }
}


function checkBOM($filename, $auto = 1) {
    $contents = file_get_contents($filename);
    $charset[1= substr($contents, 01);
    $charset[2= substr($contents, 11);
    $charset[3= substr($contents, 21);
    if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
        if ($auto == 1) {
            $rest = substr($contents, 3);
            rewrite($filename, $rest);
            return ("BOM found, automatically removed.  lfire博客");
        else {
            return ("BOM found.");
        }
    }
    else
        return ("BOM Not Found.");
}


function rewrite($filename, $data) {
    $filenum = fopen($filename, "w");
    flock($filenum, LOCK_EX);
    fwrite($filenum, $data);
    fclose($filenum);
}

?>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前次一次工程开发,有很多的uft8的php文件,其中有那么几个文件存在有BOM文件。老是出错。很烦。在网上找了几个检测清除的工具。都是只支持当前目录的。有些还是php版本的。很不方便。 最后实在受不了,干脆自己用vb写了一个小工具。 功能说明:自己指定要检测的路径,可以复选是否需要检测子目录(注意:如果文件多,可能会假死,要耐心等一下。我是采用递归的方法。如果大家有需求,这个功能可以改进不会假死)。检测完成后,结果会在列表中显示出来,可以导出到txt文件。也可以导出到其他的目录。 我现在的方法是:输入网站的目录路径,勾选检测子目录。 然后在d盘新建一个空目录,然后将结果导出到这里(要勾选创建子目录,这样会创建完整的路径) 然后用 GB2UTF81.exe 这个工具批量去掉BOM(源文件格式选 utf8,目标文件也选utf8,去掉 带BOM 的勾,不保留备份,再点 开始处理 即可)。然后把目录复制,覆盖原来的目录文件即可。 注意: 本工具暂时还不支持清除bom的功能,不过可以进行开发。如果大家感觉有需要,请在资源下面评论留言。 本压缩包附带GB/BIG/UTF-8文件编码批量转换工具(文件名:GB2UTF81.exe) 这个工具很好很强大 还有一个bom批量检测清除工具,php版本的。只可惜只支持当前目录。不支持子目录(文件名:bom.php)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值