PHP批量检测并去除文件BOM头

2018-08-21 11:26:00 4840

PHP批量检测并去除文件BOM头

方法简单快捷。将以下代码保存为后缀为php的文件放到需要去除bom的文件目录里面,然后运行该php文件即可,注意,需要使用php5.2版本,其他版本未测试是否支持

若是只需要检测,或者是检查替换,可在代码如下位置进行设置

image.png

$auto=0;/*设置为1标示检测BOM并去除,设置为0标示只进行BOM检测,不去除*/


<?php
header('content-Type: text/html; charset=utf-8');
$auto=0;/*设置为1标示检测BOM并去除,设置为0标示只进行BOM检测,不去除*/
$basedir='.';
$loop=true;//www.landui.com echo '当前查找的目录为:'.$basedir.'当前的设置是:';
echo '(1)',$loop?'检查当前目录以及当前目录的子目录':'只针对当前目录进行检测';
echo '(2)',$auto?'检测文件BOM同时去除检测到BOM文件的BOM<br />':'只检测文件BOM不执行去除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);
}

运行结果示例

只是检测不去除的执行示例

image.png

image.png

检测并执行的示例

image.png

执行一次之后再次执行,发现已经去除

image.png

提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: