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中memcache的应用
Jun 18 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
Apr 01 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
May 07 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
PHP实现根据图片色界在不同位置加水印的方法
Aug 08 PHP
培养自己的php编码规范
Sep 28 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
php判断文件上传图片格式的实例详解
Sep 30 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
Nov 20 PHP
Yii框架函数简单用法分析
Sep 09 PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 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数组是否为空的代码
2011/09/08 PHP
php中的strpos使用示例
2014/02/27 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
phpStorm2020 注册码
2020/09/17 PHP
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
JavaScript中this详解
2015/09/01 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
ES6的循环与可迭代对象示例详解
2021/01/31 Javascript
使用Python制作微信跳一跳辅助
2018/01/31 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
本科毕业生自我鉴定
2013/11/02 职场文书
架构师岗位职责
2013/11/18 职场文书
社区学习十八大感想
2014/01/22 职场文书
文秘求职信范文
2014/04/10 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
三行辞职书范文
2015/02/26 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技