當(dāng)我們保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字符(0xEF 0xBB 0xBF,即BOM),而這個bom頭可能導(dǎo)致一些不必要的問題,下面我整理了一些關(guān)于刪除uft-8文件bom頭信息一些常用方法,有興趣的朋友可進(jìn)入?yún)⒖肌?/div> 如果您在修改任何PHP文件發(fā)生:
* 不能登入或者不能登出; * 頁頂出現(xiàn)一條空白; * 頁頂出現(xiàn)錯誤警告; * 其它不正常的情況。
bom文件是怎么產(chǎn)生呢?
window編輯器如果保存為utf8文件就會幫你加上BOM頭,以告訴其他編輯器以utf8來顯示字符
但是在網(wǎng)頁上并不需要添加BOM頭識別,因?yàn)榫W(wǎng)頁上可以使用 head頭 指定charset=utf8告訴瀏覽器用utf8來解釋.但是你用window自動的編輯器,編輯,然后有顯示在網(wǎng)頁上這樣就會顯示出0xEF 0xBB 0xBF這3個字符。
這樣網(wǎng)頁上就需要去除0xEF 0xBB 0xBF,可以使用editplus 選擇不帶BOM的編碼,這樣就可以去除了
bom文件頭信息刪除
我最常用的方法來處理php文件處理
| 代碼如下 |
復(fù)制代碼 |
|
<?php
/**
* 用法:復(fù)制以下代碼至新建的php文件中,將該php文件放置項(xiàng)目目錄,運(yùn)行即可。代碼來源于網(wǎng)絡(luò)。
* chenwei 注。
*/
header('content-Type: text/html; charset=utf-8');
$auto=1;/* 設(shè)置為1標(biāo)示檢測BOM并去除,設(shè)置為0標(biāo)示只進(jìn)行BOM檢測,不去除 */
$basedir='.';
$loop=true;
echo '當(dāng)前查找的目錄為:'.$basedir.'當(dāng)前的設(shè)置是:';
echo '(1)',$loop?'檢查當(dāng)前目錄以及當(dāng)前目錄的子目錄':'只針對當(dāng)前目錄進(jìn)行檢測';
echo '(2)',$auto?'檢測文件BOM同時去除檢測到BOM文件的BOM<br />':'只檢測文件BOM不執(zhí)行去除BOM操作<br />';
checkdir($basedir,$loop);
function checkdir($basedir='',$loop=true){
$basedir=empty($basedir)?'.':$basedir;
if($dh=opendir($basedir)){
while (($file=readdir($dh))!==false){
if($file!='.'&&$file!='..'){
if(!is_dir($basedir.'/'.$file)){
echo '文件: '.$basedir.'/'.$file .checkBOM($basedir.'/'.$file).' <br>';
}else{
if(!$loop) continue;
$dirname=$basedir.'/'.$file;
checkdir($dirname);
}
}
}
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</font>');
}
}else{
return (' 沒有找到BOM');
}
}
function rewrite($filename,$data){
$filenum=fopen($filename,'w');
flock($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}
|
利用Dreamweaver 中去除bom方法
打開Dreamweaver->選擇編輯->首選參數(shù)->新建文檔標(biāo)簽->右邊->"包括Unicode 簽名(BOM)" 前面的對鉤去掉即可

editplus等編程工具時UTF-8編碼去掉BOM頭方法
編輯器調(diào)整為UTF8編碼格式后,保存的文件前面會多出一串隱藏的字符(也即是BOM),用于編輯器識別這個文件是否是以UTF8編碼。一般的文本文件會忽略這一串隱藏的字符,但對于PHP等文件會解析這一串字符,這樣會導(dǎo)致出錯。
運(yùn)行Editplus,點(diǎn)擊工具,選擇首選項(xiàng),如下圖:


然后對PHP文件編輯和保存后的PHP文件就是不帶BOM的了
linux下查找包含BOM頭的文件和清除BOM頭命令
查找包含BOM頭的文件,命令如下:
grep -r -I -l $'^\xEF\xBB\xBF' ./
這條命令會查找當(dāng)前目錄及子目錄下所有包含BOM頭的文件,并把文件名在屏幕上輸出。
但是,刪除BOM頭,網(wǎng)上找到的命令大多不能用,比較常見的命令是:
grep -r -I -l $'^\xEF\xBB\xBF' /path | xargs sed -i 's/^\xEF\xBB\xBF//;q'
但這條命令會把除了首行之外所有的行刪除,所以毫無意義。
經(jīng)測試如下命令是可行的:
find . -type f -exec sed -i 's/\xEF\xBB\xBF//' {} \;
這個命令會把當(dāng)前目錄及所有子目錄下的BOM頭刪除掉。
|