PHP批量删除、清除UTF-8文件BOM头的代码实例


Posted in PHP onApril 14, 2014

记得运行代码前先把文件备份一下哦,避免出现失败问题。

代码一:

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.");
  }

代码二:

<?php
header('content-Type: text/html; charset=utf-8');
if(isset($_GET['dir'])){ //设置文件目录,如果没有设置,则自动设置为当前文件所在目录
  $basedir=$_GET['dir'];
}else{
  $basedir='.';
}
$auto=1;/*设置为1标示检测BOM并去除,设置为0标示只进行BOM检测,不去除*/

echo '当前查找的目录为:'.$basedir.'当前的设置是:';
echo $auto?'检测文件BOM同时去除检测到BOM文件的BOM<br />':'只检测文件BOM不执行去除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并已自动去除</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);
}
?>

代码三:

##把该文件放在需求去除BOM头的目录下跑一下却可。
<?php
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) { // BOM
                                                   // 的前三个字符的ASCII
                                                   // 码分别为
                                                   // 239
                                                   // 187
                                                   // 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 );
}
?>

二、Python

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import os

def delBOM():
 file_count = 0
 bom_files = []

 for dirpath, dirnames, filenames in os.walk('.'):
 if(len(filenames)):
  for filename in filenames:
  file_count += 1
  file = open(dirpath + "/" + filename, 'r+')
  file_contents = file.read()

  if(len(file_contents) > 3):
   if(ord(file_contents[0]) == 239 and ord(file_contents[1]) == 187 and ord(file_contents[2]) == 191):
   bom_files.append(dirpath + "/" + filename)
   file.seek(0)
   file.write(file_contents[3:])
   print bom_files[-1], "BOM found. Deleted."
  file.close()

 print file_count, "file(s) found.", len(bom_files), "file(s) have a bom. Deleted."

if __name__ == "__main__":
 delBOM()

为了方便大家使用,这里三水点靠木小编分享一个BOM工具方便大家检测。

下载地址:https://3water.com/softs/496779.html

PHP 相关文章推荐
网络资源
Oct 09 PHP
PHP实现远程下载文件到本地
May 17 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
PHP安装threads多线程扩展基础教程
Nov 17 PHP
PHP代码维护,重构变困难的4种原因分析
Jan 25 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
php注册审核重点解析(数据访问)
May 23 PHP
thinkphp实现附件上传功能
May 26 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
php实现微信公众号企业转账功能
Oct 01 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 15 PHP
thinkphp实现数组分页示例
Apr 13 #PHP
不使用php api函数实现数组的交换排序示例
Apr 13 #PHP
php读取大文件示例分享(文件操作类)
Apr 13 #PHP
php使用smtp发送支持附件的邮件示例
Apr 13 #PHP
php实现上传图片生成缩略图示例
Apr 13 #PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 #PHP
PHP header()函数常用方法总结
Apr 11 #PHP
You might like
Joomla使用Apache重写模式的方法
2016/05/04 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
popdiv
2006/07/14 Javascript
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
python实现socket端口重定向示例
2014/02/10 Python
八大排序算法的Python实现
2021/01/28 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
2019/06/13 Python
python NumPy ndarray二维数组 按照行列求平均实例
2019/11/26 Python
Python守护进程实现过程详解
2020/02/10 Python
戴尔美国官网:Dell
2016/08/31 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
JAVA和C++的区别
2013/10/06 面试题
实习生岗位职责
2014/04/12 职场文书
融资租赁计划书
2014/04/29 职场文书
企业年度评优方案
2014/06/02 职场文书
小班上学期个人总结
2015/02/12 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js