php bom是用來判斷文本文件是哪一種Unicode編碼的標(biāo)記;在utf-8編碼文件中,BOM在文件頭部,占用三個(gè)字節(jié),用來標(biāo)示該文件屬于utf-8編碼。
本教程操作環(huán)境:Windows10系統(tǒng)、PHP8.1版、DELL G3電腦
php bom是什么意思?
PHP-BOM
1.問題描述:所有使用控制層返回的ajax請求都會(huì)在前面附加一個(gè)小紅點(diǎn),查了一下是因?yàn)槲募懊嬗蠦OM,雖然事后證明并不是所有的文件都帶有BOM,但是卻造成所有的文件返回?cái)?shù)據(jù)都出現(xiàn)問題。
2.那么,什么是BOM呢?
答曰:在utf-8編碼文件中BOM在文件頭部,占用三個(gè)字節(jié),用來標(biāo)示該文件屬于utf-8編碼,現(xiàn)在已經(jīng)有很多軟件識(shí)別bom頭,但是還有些不能識(shí)別bom頭,比如PHP就不能識(shí)別bom頭,這也是用記事本編輯utf-8編碼后執(zhí)行就會(huì)出錯(cuò)的原因了。
3.解決方案,去網(wǎng)上找一些批量處理BOM的腳本運(yùn)行一下就行了,你也可以運(yùn)行像editplus、Ultraedit這樣的工具來解決。
4.最后提供一個(gè)去BOM的文件,運(yùn)行一下就可以了。
echo '當(dāng)前查找的目錄為:'.$basedir.'當(dāng)前的設(shè)置是:'; echo $auto?'檢測文件BOM同時(shí)去除檢測到BOM文件的BOM<br />':'只檢測文件BOM不執(zhí)行去除BOM操作<br />'; checkdir($basedir); function checkdir($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{ $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并已自動(dòng)去除</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); } ?>
登錄后復(fù)制
推薦學(xué)習(xí):《PHP視頻教程》