PHP批量去除BOM頭內(nèi)容信息代碼
什么是bom頭?
在utf-8編碼文件中BOM在文件頭部,占用三個(gè)字節(jié),用來(lái)標(biāo)示該文件屬于utf-8編碼,現(xiàn)在已經(jīng)有很多軟件識(shí)別bom頭,但是還有些不能識(shí)別bom頭,比如PHP就不能識(shí)別bom頭,這也是用記事本編輯utf-8編碼后執(zhí)行就會(huì)出錯(cuò)的原因了。
批量去除bom頭代碼如下所示:
<?php
if (isset($_GET['dir'])){ //設(shè)置文件目錄
$basedir=$_GET['dir'];
}else{
$basedir = '.';
}
$auto = 1;
checkdir($basedir);
function checkdir($basedir){
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file != '.' && $file != '..'){
if (!is_dir($basedir."/".$file)) {
echo "filename: $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 found, automatically removed._<a href=http://www.joyphper.net>http://www.joyphper.net</a></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);
}
?>
PS:去掉bom頭的辦法,簡(jiǎn)單的是下面兩種:
1、editplus去BOM頭的方法
編輯器調(diào)整為UTF8編碼格式后,保存的文件前面會(huì)多出一串隱藏的字符(也即是BOM),用于編輯器識(shí)別這個(gè)文件是否是以UTF8編碼。
運(yùn)行Editplus,點(diǎn)擊工具,選擇首選項(xiàng),選中文件,UTF-8標(biāo)識(shí)選擇 總是刪除簽名,
然后對(duì)PHP文件編輯和保存后的PHP文件就是不帶BOM的了。
2、ultraedit去除bom頭辦法
打開(kāi)文件后,另存為選項(xiàng)的編碼格式里選擇(utf-8 無(wú)bom頭),確定就ok了
怎么樣,去掉bom頭很簡(jiǎn)單吧
再來(lái)一段議論utf8的BOM信息的
BOM是指php文件本身的存儲(chǔ)方式為帶BOM的UTF-8,普通頁(yè)面的中文亂碼方式一般不是由這個(gè)原因?qū)е碌摹?/p>
header("Content-type: text/html; charset=utf-8");
這句話控制html輸出頁(yè)面的編碼方式,
BOM只有在WINDOWS下采用“記事本”存儲(chǔ)為UTF-8時(shí)才會(huì)有,這個(gè)可以用WINHEX把開(kāi)始的2個(gè)字節(jié)刪掉。
在dreamweaver里面編碼設(shè)置里面可以設(shè)置是否帶BOM,一般只要php輸出的不是圖片(GDI Stream),BOM都不會(huì)導(dǎo)致問(wèn)題。
GDI Stream如果開(kāi)頭有了額外的 字符就會(huì)顯示為 紅叉。
相關(guān)文章
php實(shí)現(xiàn)產(chǎn)品加入購(gòu)物車功能(1)
這篇文章主要為大家詳細(xì)介紹了php實(shí)現(xiàn)產(chǎn)品加入購(gòu)物車功能,具有一定的參考價(jià)值,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
PHP+百度AI OCR文字識(shí)別實(shí)現(xiàn)了圖片的文字識(shí)別功能
這篇文章主要介紹了PHP+百度AI OCR文字識(shí)別實(shí)現(xiàn)了圖片的文字識(shí)別功能,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
PHP檢測(cè)移動(dòng)設(shè)備類mobile detection使用實(shí)例
這篇文章主要介紹了PHP檢測(cè)移動(dòng)設(shè)備類mobile detection使用實(shí)例,mobile detection可以檢測(cè)到絕大部分手機(jī)、平板電腦的操作系統(tǒng)、瀏覽器等數(shù)據(jù),需要的朋友可以參考下2014-04-04
php獲取301跳轉(zhuǎn)URL簡(jiǎn)單實(shí)例
這篇文章主要介紹了php獲取301跳轉(zhuǎn)URL簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下2013-12-12
YII2框架實(shí)現(xiàn)表單中上傳單個(gè)文件的方法示例
這篇文章主要介紹了YII2框架實(shí)現(xiàn)表單中上傳單個(gè)文件的方法,結(jié)合實(shí)例形式分析了YII2框架表單提交與文件上傳相關(guān)操作技巧,需要的朋友可以參考下2020-03-03
PHP處理二進(jìn)制數(shù)據(jù)的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇PHP處理二進(jìn)制數(shù)據(jù)的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
Laravel統(tǒng)一錯(cuò)誤處理為JSON的方法介紹
這篇文章主要給大家介紹了關(guān)于Laravel統(tǒng)一錯(cuò)誤處理為JSON的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
laravel 實(shí)現(xiàn)登陸后返回登陸前的頁(yè)面方法
今天小編就為大家分享一篇laravel 實(shí)現(xiàn)登陸后返回登陸前的頁(yè)面方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
laravel框架關(guān)于搜索功能的實(shí)現(xiàn)
本文是作者整理的關(guān)于laravel框架搜索功能的實(shí)現(xiàn)原理,并附上了詳細(xì)代碼,有需要的小伙伴請(qǐng)持續(xù)關(guān)注!2018-03-03

