国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

PHP實(shí)現(xiàn)UTF-8文件BOM自動(dòng)檢測與移除實(shí)例

2024-05-04 23:26:55
字體:
供稿:網(wǎng)友
這篇文章主要介紹了PHP實(shí)現(xiàn)UTF-8文件BOM自動(dòng)檢測與移除的方法,實(shí)例講述了UTF-8文件BOM信息的原理與PHP對此的檢測與刪除方法,是非常實(shí)用的技巧,需要的朋友可以參考下
 
 

本文實(shí)例講述了PHP實(shí)現(xiàn)UTF-8文件BOM自動(dòng)檢測與移除的方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

BOM信息是文件開頭的一串隱藏的字符,用于讓某些編輯器識(shí)別這是個(gè)UTF-8編碼的文件。但PHP在讀取文件時(shí)會(huì)把這些字符讀出,從而形成了文件 開頭含有一些無法識(shí)別的字符的問題。

比如用UTF-8格式保存的生成圖片的PHP文件,因?yàn)槲募^隱藏的BOM信息也被下發(fā),導(dǎo)致生成的 圖片數(shù)據(jù)不對,瀏覽器無法識(shí)別。

要檢測一個(gè)UTF-8文件是否含有BOM信息,就是檢測文件開頭的字三個(gè)符,是否為0xEF, 0xBB, 0xBF。下面這個(gè)小程序,用戶遍歷某個(gè)目錄下所有文件,并檢測是否加了BOM。

復(fù)制代碼代碼如下:
<?php
//此文件用于快速測試UTF8編碼的文件是不是加了BOM,并可自動(dòng)移除
//By Bob Shen

 

$basedir="."; //修改此行為需要檢測的目錄,點(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,修改需要檢測的目錄后運(yùn)行。這樣可能有助于檢測是哪個(gè)文件帶有了BOM信息導(dǎo)致所有頁面開頭都有 那么一段空白。

 

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

復(fù)制代碼代碼如下:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<h3><?echo $_POST["dir"];?>目錄下的檢測結(jié)果</h3>
<?php
//此文件用于快速測試UTF8編碼的文件是 不是加了BOM,并可自動(dòng)移除
//By bob 老大
//風(fēng)吟修改
$目錄= str_replace(" ", "|", $_POST["dir"]);//接受提交的路徑數(shù)據(jù)
$basedir="$目錄"; //修改此行為需要檢測的目錄,點(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="檢測目錄" >
</form>
請 輸入文件夾名比如 plugin/fanfou 后面不需要加/。如果要檢測根目錄輸入“ . ”  . 是小數(shù)點(diǎn) 提交既可
</br>

 

希望本文所述對大家的PHP程序設(shè)計(jì)有所幫助。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 句容市| 郧西县| 北辰区| 广宁县| 南召县| 青海省| 灌南县| 双柏县| 偏关县| 满洲里市| 榆社县| 鸡泽县| 香河县| 霍林郭勒市| 紫阳县| 桃园市| 绵阳市| 苏州市| 遂宁市| 睢宁县| 长葛市| 锡林浩特市| 民丰县| 新建县| 英山县| 府谷县| 兴安盟| 瑞安市| 海宁市| 北京市| 阿图什市| 固阳县| 定州市| 武隆县| 永丰县| 西宁市| 曲沃县| 绩溪县| 石门县| 兰溪市| 洪洞县|