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 Mysql编程之高级技巧
Aug 27 PHP
php 操作符与控制结构
Mar 07 PHP
php打造属于自己的MVC框架
Mar 07 PHP
php小经验:解析preg_match与preg_match_all 函数
Jun 29 PHP
php中用socket模拟http中post或者get提交数据的示例代码
Aug 08 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
php递归法读取目录及文件的方法
Jan 30 PHP
分享3个php获取日历的函数
Sep 25 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 06 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 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
星际实力自我测试
2020/03/04 星际争霸
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
js+css在交互上的应用
2010/07/18 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
JavaScript无缝滚动效果的实例代码
2017/03/27 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
Python中logging模块的用法实例
2014/09/29 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
Django中的cookie和session
2019/08/27 Python
对python中list的五种查找方法说明
2020/07/13 Python
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
后勤人员自我评价怎么写
2013/09/19 职场文书
应届专科生个人的自我评价
2014/01/05 职场文书
党支部书记岗位责任制
2014/02/11 职场文书
教师专业自荐信
2014/05/31 职场文书
授权委托书
2014/07/31 职场文书
承租经营合作者协议书
2014/10/01 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
Python使用MapReduce进行简单的销售统计
2022/04/22 Python