主題: 自动移除文件中的 utf-8 bom的小程式
作者: magicbug 於 三月 26, 2006, 12:11:56 下午
一不小心让 ultraedit 写入了bom(因为我在别的机器上编辑过文件,他的ultraedit.ini没设置过),所以搞得authimage显示不出来,忙了好几天。当然最根本就是在ultraedit.ini中修改一下设置为: Write UTF-8 BOM=0 Write UTF-8 BOM NF=0
同时写了一个小程序,用来自动移除文件头中的boms,放到根目录中执行一次就行了。 :-) <?php //remove the utf-8 boms //by magicbug at gmail dot com
if (isset($_GET['dir'])){ //config the basedir $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.</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); } ?>
主題: Re: 自动移除文件中的 utf-8 bom的小程式
作者: ericj 於 四月 07, 2006, 05:51:29 上午
這篇文章,很有用喔。 解決了我一個很神秘的問題 -.- 真是太感謝了^^
主題: Re: 自动移除文件中的 utf-8 bom的小程式
作者: markwu 於 四月 10, 2006, 07:03:09 下午
謝謝!很棒的文章!
Mark
主題: Re: 自动移除文件中的 utf-8 bom的小程式
作者: hollowaysxp 於 五月 22, 2007, 09:08:42 上午
批量轉檔可以用ConvertZ 如果單一修改檔案不要BOM可以用EmEditor來做。
|