快速测试UTF8编码的文件是不是加了BOM,并可自动移除

2021-07-09 11:24:35 浏览数 (1)

代码语言:javascript复制
<?
 
// ****************************
// microsnow
// 此文件用于快速测试UTF8编码的文件是不是加了BOM,并可自动移除
// 基本于 Bob Shen 的版本,二次开发
// ****************************
 
$basedir='WWW_PATH'; //修改此行为需要检测的目录,点表示当前目录
$auto=1; //是否自动移除发现的BOM信息。1为是,0为否。
 
//以下不用改动
read_dir($basedir);
 
// 遍历目录
function read_dir($dir)
{
    static $i = 1;
    static $dir_list = [];
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if ($file == '.' || $file == '..') {
                continue;
            }
            if (is_dir($dir."/".$file)) {
                read_dir($dir."/".$file);
            } else {
                echo "file_name: $dir.$file ".check_bom("$dir/$file")." <br>"; 
            }
        }
        closedir($dh);
    }
}
 
// 检查bom
function check_bom($file_name) {
    global $auto;
    $contents=file_get_contents($file_name);
    $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 ($file_name, $rest);
            return ("<font color=red>BOM found, automatically removed.</font>");
        } else {
            return ("<font color=red>BOM found.</font>");
        }
    } else {
        return ("BOM Not Found.");
    }
}
 
// 重新写入文件
function rewrite($file_name, $data) {
    $file_handle =fopen($file_name, "w");
    flock($file_handle, LOCK_EX);
    fwrite($file_handle, $data);
    fclose($file_handle);
}

0 人点赞