<?php

class KillBom
{
//定义扩展名
public static $m_ext = ['txt','php','js','css'];

/**
* 传入一个任意文件,自动区分定义的扩展名,然后过滤
* @param string $file
* @return boolean
*/
public static function killBomByFile($file)
{
//获取一个文件的扩展名
$ext = pathinfo($file,PATHINFO_EXTENSION);
if (in_array($ext, self::$m_ext) and is_file($file))//允许被替换,而且是个文件(不是目录)
{
$content = file_get_contents($file);//取出文件详情
if (substr($content, 0, 3) == chr(0xEF) . chr(0xBB) . chr(0xBF))//ef.bb.bf检查bom头
{
return file_put_contents($file,substr($content, 3)) > 0;//清除bom并写入文件
}
}
return false;
}

/**
* 遍历获取子目录 及文件夹
* @param string $dir
* @return string[]
*/

public static function getFileListByDir($dir)
{
//打开文件
$dir_handle = opendir($dir);
//存储结果
$result = [];
while ($file = readdir($dir_handle))//不断读取目录
{
if ($file != '.' and != '..')//不是本级目录,上级目录
//组装成绝对路径 DIRECTORY_SEPARATOR目录分隔符,windows为\,linux为/
$file = $dir . DIRECTORY_SEPARATOR . $file;
if (is_dir($file))// 是目录的话
{
//递归合并结果
$result = array_merge($result , self::getFileListByDir($file));
}
else
{
$result[] = $file;// 记录结果
}
}
return $result;//返回结果
}

/**
* 清空目录下所有Bom头文件
* @param string $dir
*/
public function killDir($dir)
{
//先找到所有文件
$files = self::getFileListByDir($dir);
foreach ($files as $file)
{
if (!self::killBomByFile($file))//干掉
{
echo $file . '-> no bom! <br>'.chr(13);//结果
}
else
{
echo $file . '-> bom is killed! <br>'.chr(13);//结果
}
}
}
}
//调用
killBom::killDir('你的目录');

批量去除文件的BOM头的更多相关文章

  1. bat批量去除文件首行和合并到文件

    bat批量去除文件首行 set n=1 :starline for %%j in (*.txt) do ( :3 if exist D:\work\test\new_%n%.txt (set /a n ...

  2. 什么是文件的BOM头

    1.什么是BOM? BOM是用来判断文本文件是哪一种Unicode编码的标记,其本身是一个Unicode字符("\uFEFF"),位于文本文件头部. 在不同的Unicode编码中, ...

  3. 什么是文件的BOM头,及BOM头有哪些坑?

    1.什么是BOM? BOM是用来判断文本文件是哪一种Unicode编码的标记,其本身是一个Unicode字符("\uFEFF"),位于文本文件头部. 在不同的Unicode编码中, ...

  4. PHP批量去除文件BOM头

    auto 是否自动替换 默认否 dir 检查目录 默认./ display 是否显示所有文件 默认只显示有bom头的文件 <?php empty($_GET['auto']) && ...

  5. php批量检测和去掉bom头(转)

    <?php //有些php文件由于不小心保存成了含bom头的格式而导致出现一系列的问题.以下是批量清除bom头的代码 if (isset ( $_GET ['dir'] )) { //confi ...

  6. 关于UTF8文件带BOM头可能会引起的错误解析

    今天在做一个文件上传的项目中碰到了一个十分奇怪的问题,在解析上传上来的csv文件时,总是在解析第一行的第一个标题字段时出错,就是第一个那个字段总是和对应的model字段对应不上,这个坑是真的很深,找了 ...

  7. java utf-8文件处理bom头

    UTF? UTF,是UnicodeTransformationFormat的缩写,意为Unicode转换格式. 即怎样将Unicode定义的数字转换成程序数据.utf是对Unicode的一种编码格式化 ...

  8. 批量给文件去BOM(百度网盘)

    链接:https://pan.baidu.com/s/1jC8RkyC0xX1lA-zZjOyDsw 提取码:geko 第一步:浏览你要移除BOM编码的文件夹.第二步:点击移除bom,随后会弹出提示框 ...

  9. PHP取得json前面有乱码(去除文件头部BOM)

    curl请求接口时,返回结果如下: {} 想把json转换成数组或者对象,但是用json_decode返回是空的,然后用var_dump打印了一下返回结果,发现结果如下: ) 发现前面多了两个字符,因 ...

随机推荐

  1. AFNetWorking 源码粗浅理解

    最近在看AFNetWorking的源码,整理出自己的一点思路.先从一个最简单的网络请求看: NSString *urlStr = [NSString stringWithFormat:@"h ...

  2. Python数据分析--Pandas知识点(三)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...

  3. (十)创建ROS消息和ROS服务

    ROS总教程(中文版) 110.创建ROS消息和ROS服务

  4. 微信小程序之----获取设备信息

    1. 获取系统信息        wx.getSystemInfo(OBJECT)        wx.getSystemInfoSync() 同步获取系统信息                回调常用 ...

  5. caoni大业 spring boot 跳坑记

    IDEA环境 win10 跑得刚刚,到xp系统就戈壁 报错 Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.g ...

  6. 《C#从现象到本质》读书笔记(五)第5章字符串第6章垃圾回收第7章异常与异常处理

    <C#从现象到本质>读书笔记(五)第5章字符串 字符串是引用类型,但如果在某方法中,将字符串传入另一方法,在另一方法内部修改,执行完之后,字符串的只并不会改变,而引用类型无论是按值传递还是 ...

  7. 学习Tensorflow的LSTM的RNN例子

    学习Tensorflow的LSTM的RNN例子 基于TensorFlow一次简单的RNN实现 极客学院-递归神经网络 如何使用TensorFlow构建.训练和改进循环神经网络

  8. # 2019-2020.3 《java程序设计》第一周学习总结

    2019-2020-3 <Java 程序设计>第一周学习总结 在本周的学习中,学习到了好多也收获了好多,从最基础的安装虚拟机开始,根据老师的博客中的教程一步一步的进行,在这过程中也遇到了好 ...

  9. 汇编语言计算Sin,Cos,Pow函数

    填了一下之前的坑.首先是一个题外话,在VS2015中默认汇编代码会使用SSE生成,如果想用FPU编译出FLD,FSTP这些指令,需要设置一下. 项目 >> 属性 >> C/C+ ...

  10. 深入理解定位父级offsetParent及偏移大小offsetTop / offsetLeft / offsetHeight / offsetWidth

    深入理解定位父级offsetParent及偏移大小 [转载] 前面的话 偏移量(offset dimension)是javascript中的一个重要的概念.涉及到偏移量的主要是offsetLeft.o ...