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 相关文章推荐
介绍php设计模式中的工厂模式
Jun 12 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
PHP中$_FILES的使用方法及注意事项说明
Feb 14 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
Dec 04 PHP
php模拟post提交数据的方法
Feb 12 PHP
php图片添加水印例子
Jul 20 PHP
php 使用html5实现多文件上传实例
Oct 24 PHP
php封装的mongodb操作类代码
Aug 06 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
Mar 12 PHP
PHP封装curl的调用接口及常用函数详解
May 31 PHP
PHP实现百度人脸识别
May 06 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
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
强制设为首页代码
2006/06/19 Javascript
js arguments.callee的应用代码
2009/05/07 Javascript
JS写的贪吃蛇游戏(个人练习)
2013/07/08 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
js获取url传值的方法
2015/12/18 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
React实践之Tree组件的使用方法
2017/09/30 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
python框架django基础指南
2016/09/08 Python
Python简单计算数组元素平均值的方法示例
2017/12/26 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
学习Python爬虫的几点建议
2020/08/05 Python
意大利团购网站:Groupon意大利
2016/10/11 全球购物
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
建材业务员岗位职责
2013/12/08 职场文书
企业管理培训感言
2014/01/27 职场文书
就业表自我评价分享
2014/02/06 职场文书
护士个人年度总结范文
2015/02/13 职场文书
综合测评自我评价
2015/03/06 职场文书
婚礼父母致辞
2015/07/28 职场文书
运动会主持人开幕词
2016/03/04 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书
OpenCV 图像梯度的实现方法
2021/07/25 Python