什么是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ò)的原因了。
批量去除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頭的辦法,簡單的是下面兩種:
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頭辦法
打開文件后,另存為選項(xiàng)的編碼格式里選擇(utf-8 無bom頭),確定就ok了
怎么樣,去掉bom頭很簡單吧
再來一段議論utf8的BOM信息的
BOM是指php文件本身的存儲(chǔ)方式為帶BOM的UTF-8,普通頁面的中文亂碼方式一般不是由這個(gè)原因?qū)е碌摹?/p>
header("Content-type: text/html; charset=utf-8");
這句話控制html輸出頁面的編碼方式,
BOM只有在WINDOWS下采用“記事本”存儲(chǔ)為UTF-8時(shí)才會(huì)有,這個(gè)可以用WINHEX把開始的2個(gè)字節(jié)刪掉。
在dreamweaver里面編碼設(shè)置里面可以設(shè)置是否帶BOM,一般只要php輸出的不是圖片(GDI Stream),BOM都不會(huì)導(dǎo)致問題。
GDI Stream如果開頭有了額外的 字符就會(huì)顯示為 紅叉。