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下使用SMTP发邮件的代码
Jan 10 PHP
PHP用mysql数据库存储session的代码
Mar 05 PHP
PHP 调试工具Debug Tools
Apr 30 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
Jul 18 PHP
获取URL文件名后缀
Oct 24 PHP
PHP stream_context_create()函数的使用示例
May 12 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
Jun 10 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
PHP静态延迟绑定和普通静态效率的对比
Oct 20 PHP
PHP命令Command模式用法实例分析
Aug 08 PHP
PHP如何通过表单直接提交大文件详解
Jan 08 PHP
基于PHP实现堆排序原理及实例详解
Jun 19 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中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
php多重接口的实现方法
2015/06/20 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
Laravel下生成验证码的类
2017/11/15 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
类似框架的js代码
2006/11/09 Javascript
js获取图片长和宽度的代码
2009/11/24 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
jQuery实现的placeholder效果完整实例
2016/08/02 Javascript
微信小程序 toast 详解及实例代码
2016/11/09 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
在Vue中使用echarts的方法
2018/02/05 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
Python二分法搜索算法实例分析
2015/05/11 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
pycharm设置注释颜色的方法
2018/05/23 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
Python while true实现爬虫定时任务
2020/06/08 Python
python中如何设置代码自动提示
2020/07/15 Python
美国内衣品牌:Leonisa
2016/08/14 全球购物
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
医药工作者的求职信范文
2013/09/21 职场文书
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
银行业务授权委托书
2014/10/10 职场文书
MySQL日期时间函数知识汇总
2022/03/17 MySQL
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL