PHP版UTF-8檔案BOM自動檢測移除程式

來源:互聯網
上載者:User

BOM資訊是檔案開頭的一串隱藏的字元,用於讓某些編輯器識別這是個UTF-8編碼的檔案。但PHP在讀取檔案時會把這些字元讀出,從而形成了檔案開頭含有一些無法識別的字元的問題。

比如用UTF-8格式儲存的產生圖片的PHP檔案,因為檔案頭隱藏的BOM資訊也被下發,導致產生的圖片資料不對,瀏覽器無法識別。

要檢測一個UTF-8檔案是否含有BOM資訊,就是檢測檔案開頭的字三個符,是否為0xEF, 0xBB, 0xBF。下面這個小程式,使用者遍曆某個目錄下所有檔案,並檢測是否加了BOM。

[code]<?
//此檔案用於快速測試UTF8編碼的檔案是不是加了BOM,並可自動移除
//By Bob Shen

$basedir="."; //修改此行為需要檢測的目錄,點表示目前的目錄
$auto=1; //是否自動移除發現的BOM資訊。1為是,0為否。

//以下不用改動

if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file!='.' && $file!='..' && !is_dir($basedir."/".$file)) echo "filename: $file ".checkBOM("$basedir/$file")." <br>";
}
closedir($dh);
}

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.");
}

function rewrite ($filename, $data) {
$filenum=fopen($filename,"w");
flock($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}[/code]將以上代碼另存新檔del_bom.php,修改需要檢測的目錄後運行。這樣可能有助於檢測是哪個檔案帶有了BOM資訊導致所有頁面開頭都有那麼一段空白。

 

 

把下面 代碼儲存為 bom.php  記得儲存為 utf8 格式  

 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<h3><?echo $_POST["dir"];?>目錄下的檢測結果</h3>
<?
//此檔案用於快速測試UTF8編碼的檔案是不是加了BOM,並可自動移除
//By bob 老大
//風吟修改
$目錄= str_replace(" ", "|", $_POST["dir"]);//接受提交的路徑資料
$basedir="$目錄"; //修改此行為需要檢測的目錄,點表示目前的目錄
$auto=1; //是否自動移除發現的BOM資訊。1為是,0為否。
//以下不用改動
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file!='.' && $file!='..' && !is_dir($basedir."/".$file)) echo "filename: $file ".checkBOM("$basedir/$file")." <br>";
}
closedir($dh);
}
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 已經清除完畢。</font>");
} else {
return ("<font color=red>--Bom found.</font>");
}
}
else return ("--沒有檢查到Bom.");
}
function rewrite ($filename, $data) {
$filenum=fopen($filename,"w");
flock($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}
?>

<form action="" method="POST">
目錄: <input type="text" name="dir" />
<input type="submit" value="檢測目錄" >
</form>
請輸入檔案夾名比如 plugin/fanfou 後面不需要加/。如果要檢測根目錄輸入“ . ”  . 是小數點 提交既可
</br>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.