Total Pageviews

Saturday, 6 April 2013

用PHP检测并去掉UTF-8中的BOM

做新主题时发现了一个很奇怪的问题,怎么调整页面的顶端都有一小块空白,烦恼了半天,突然想到会不会是BOM的问题呢,因为曾经也遇到过类似问题,于 是
到网上找了个小程序来检测BOM,果然不出所料,就是BOM在作怪,清除BOM后就好了。网上找的这段代码还真不错,不但能够检测BOM,还能够自动清除BOM,代码如下:

/*检测并清除BOM*/ 
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); 
}//end function

将以上代码保存为PHP文件,放入你要清除BOM的文件的文件夹根目录,运行一次即可。