今天有小伙伴來請教,在php中如何去掉文件的BOM頭或者php去除內容中的BOM頭。正好今天是周未,也沒有什么事,就寫一寫關于這方面的教程吧。

文件BOM頭的介紹

在 utf-8 編碼的文件頭部會含有一個BOM頭,它占用三個字節,是用來標示該文件屬于utf-8編碼。

現在已經有很多軟件都可以識別bom頭的,但還是有一些軟件或編程語言是識別不了BOM頭的,而php就屬于不能識別BOM頭的編程語言。

php 刪除內容中的BOM頭

国产视频app 一般含有BOM頭的內容都是從 utf-8 編碼的文本文件中提取的,我們可以通過php對內容進行處理,來達到去掉 BOM 頭的目的。

php代碼:

<?php
//定義一個刪除BOM頭的PHP函數
function del_bom($contents){
    $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) {
        $rest = substr($contents, 3);
        return $rest;
}else{
        return $contents;
    }
}
?>

函數的調用:

<?php
//從 TXT 文件讀取內容
$cont = file_get_contents('text.txt'); 
// 刪除內容中的 BOM 頭
echo del_bom($cont);
?>

php 批量刪除文件中的 BOM 頭

国产视频app 在使用記事本或一些其它別的編程軟件編寫PHP文件時,如果操作不規范很有可能會留有BOM頭,如果是單個文件的情況下直接在編程軟件中修改下即可,如果文件多了,就要使用批量的處理方法。下面就來說一個php批量去除文件中bom頭的方法。

php代碼:

<?php
if (isset($_GET['dir'])) { //設置文件目錄 
    $basedir = $_GET['dir']; 
    }else{ 
    $basedir = '.'; 
} 
$auto = true; //定義是否去掉文件中的BOM頭,如果為 false 則只檢測是否含有 BOM 頭
checkdir($basedir);//檢測目錄
function checkdir($basedir){
    if ($dh = opendir($basedir)) {
        while (($file = readdir($dh)) !== false) {
            if($file{0} == '.'){
                continue;
            }
            if($file != '.' && $file != '..'){
                if (!is_dir($basedir."/".$file)) {
                    echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";
                }else{
                    $dirname = $basedir."/".$file;
                    checkdir($dirname);
                }
            }
        }
        closedir($dh);
    }
}
//檢查文件是否有BOM頭,通過 全局變量 $auto 來控制是否刪除文件中的BOM頭
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) {
            $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.");
    }    
}
//重寫文件,以達到刪除BOM頭的目的
function rewrite ($filename, $data) {
    $filenum = fopen($filename, "w");
    flock($filenum, LOCK_EX);
    fwrite($filenum, $data);
    fclose($filenum);
}
?>