PHP實(shí)現(xiàn)UTF-8文件BOM自動(dòng)檢測(cè)與移除實(shí)例
本文實(shí)例講述了PHP實(shí)現(xiàn)UTF-8文件BOM自動(dòng)檢測(cè)與移除的方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
BOM信息是文件開頭的一串隱藏的字符,用于讓某些編輯器識(shí)別這是個(gè)UTF-8編碼的文件。但PHP在讀取文件時(shí)會(huì)把這些字符讀出,從而形成了文件 開頭含有一些無法識(shí)別的字符的問題。
比如用UTF-8格式保存的生成圖片的PHP文件,因?yàn)槲募^隱藏的BOM信息也被下發(fā),導(dǎo)致生成的 圖片數(shù)據(jù)不對(duì),瀏覽器無法識(shí)別。
要檢測(cè)一個(gè)UTF-8文件是否含有BOM信息,就是檢測(cè)文件開頭的字三個(gè)符,是否為0xEF, 0xBB, 0xBF。下面這個(gè)小程序,用戶遍歷某個(gè)目錄下所有文件,并檢測(cè)是否加了BOM。
//此文件用于快速測(cè)試UTF8編碼的文件是不是加了BOM,并可自動(dòng)移除
//By Bob Shen
$basedir="."; //修改此行為需要檢測(cè)的目錄,點(diǎn)表示當(dāng)前目錄
$auto=1; //是否自動(dòng)移除發(fā)現(xiàn)的BOM信息。1為是,0為否。
//以 下不用改動(dòng)
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);
}
將以上代碼另存為del_bom.php,修改需要檢測(cè)的目錄后運(yùn)行。這樣可能有助于檢測(cè)是哪個(gè)文件帶有了BOM信息導(dǎo)致所有頁面開頭都有 那么一段空白。
把下面 代碼保存為 bom.php 記得保存為 utf8 格式
<h3><?echo $_POST["dir"];?>目錄下的檢測(cè)結(jié)果</h3>
<?php
//此文件用于快速測(cè)試UTF8編碼的文件是 不是加了BOM,并可自動(dòng)移除
//By bob 老大
//風(fēng)吟修改
$目錄= str_replace(" ", "|", $_POST["dir"]);//接受提交的路徑數(shù)據(jù)
$basedir="$目錄"; //修改此行為需要檢測(cè)的目錄,點(diǎn)表示當(dāng)前目錄
$auto=1; //是否自動(dòng)移除發(fā)現(xiàn)的BOM信息。1為是,0為否。
//以下不用改動(dòng)
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 已經(jīng)清除完畢。</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="檢測(cè)目錄" >
</form>
請(qǐng) 輸入文件夾名比如 plugin/fanfou 后面不需要加/。如果要檢測(cè)根目錄輸入“ . ” . 是小數(shù)點(diǎn) 提交既可
</br>
希望本文所述對(duì)大家的PHP程序設(shè)計(jì)有所幫助。
- php中json_encode UTF-8中文亂碼的更好解決方法
- php中文亂碼怎么辦如何讓瀏覽器自動(dòng)識(shí)別utf-8
- PHP頁面轉(zhuǎn)UTF-8中文編碼亂碼的解決辦法
- php的mail函數(shù)發(fā)送UTF-8編碼中文郵件時(shí)標(biāo)題亂碼的解決辦法
- php smarty截取中文字符亂碼問題?gb2312/utf-8
- php截取utf-8中文字符串亂碼的解決方法
- php自動(dòng)識(shí)別文件編碼并轉(zhuǎn)換為UTF-8的方法
- PHP批量刪除、清除UTF-8文件BOM頭的代碼實(shí)例
- PHP iconv 解決utf-8和gb2312編碼轉(zhuǎn)換問題
- PHP如何實(shí)現(xiàn)Unicode和Utf-8編碼相互轉(zhuǎn)換
- PHP讀取文件,解決中文亂碼UTF-8的方法分析
相關(guān)文章
php中g(shù)et_cfg_var()和ini_get()的用法及區(qū)別
這篇文章主要介紹了php中g(shù)et_cfg_var()和ini_get()的用法及區(qū)別,實(shí)例分析了get_cfg_var()和ini_get()函數(shù)的區(qū)別與使用技巧,需要的朋友可以參考下2015-03-03PHP使用微信開發(fā)模式實(shí)現(xiàn)搜索已發(fā)送圖文及匹配關(guān)鍵字回復(fù)的方法
這篇文章主要介紹了PHP使用微信開發(fā)模式實(shí)現(xiàn)搜索已發(fā)送圖文及匹配關(guān)鍵字回復(fù)的方法,涉及php針對(duì)微信json格式數(shù)據(jù)的解析與正則匹配相關(guān)操作技巧,需要的朋友可以參考下2017-09-09PHP中使用glob函數(shù)實(shí)現(xiàn)一句話刪除某個(gè)目錄下的所有文件
這篇文章主要介紹了PHP中使用glob函數(shù)實(shí)現(xiàn)一句話刪除某個(gè)目錄下的所有文件,重點(diǎn)在glob函數(shù)的使用上,需要的朋友可以參考下2014-07-07PHP中加密解密函數(shù)與DES加密解密實(shí)例
這篇文章主要介紹了PHP中加密解密函數(shù)與DES加密解密,以實(shí)例形式分析了常用的PHP加密解密算法encrypt與DES加密解密的原理及應(yīng)用方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10php中實(shí)現(xiàn)可以返回多個(gè)值的函數(shù)實(shí)例
這篇文章主要介紹了php中實(shí)現(xiàn)可以返回多個(gè)值的函數(shù),實(shí)例分析了php使用數(shù)組返回多個(gè)值的技巧,需要的朋友可以參考下2015-03-03php+javascript實(shí)現(xiàn)的動(dòng)態(tài)顯示服務(wù)器運(yùn)行程序進(jìn)度條功能示例
這篇文章主要介紹了php+javascript實(shí)現(xiàn)的動(dòng)態(tài)顯示服務(wù)器運(yùn)行程序進(jìn)度條功能,涉及php結(jié)合javascript數(shù)學(xué)運(yùn)算與緩沖輸出相關(guān)操作技巧,需要的朋友可以參考下2017-08-08