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执行速度全攻略(下)
Oct 09 PHP
php 验证码制作(网树注释思想)
Jul 20 PHP
PHP操作xml代码
Jun 17 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
PHP zip扩展Linux下安装过程分享
May 05 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
Aug 21 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
php eval函数一句话木马代码
May 21 PHP
php实现的操作excel类详解
Jan 15 PHP
Windows下php+mysql5.7配置教程
May 16 PHP
phpMyAdmin通过密码漏洞留后门文件
Nov 20 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
php中文本数据翻页(留言本翻页)
2006/10/09 PHP
PHP及Zend Engine的线程安全模型分析
2011/11/10 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
kmock javascript 单元测试代码
2011/02/06 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
RequireJs的使用详解
2017/02/19 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
原生js实现轮播图特效
2020/05/04 Javascript
使用python编写udp协议的ping程序方法
2018/04/22 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
商务英语专业求职信范文
2014/01/28 职场文书
远程研修随笔感言
2014/02/10 职场文书
开展创先争优活动总结
2014/08/28 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
机关保密工作承诺书
2015/05/04 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
python批量创建变量并赋值操作
2021/06/03 Python
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server