批量去除文件的BOM头
<?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头的更多相关文章
- bat批量去除文件首行和合并到文件
bat批量去除文件首行 set n=1 :starline for %%j in (*.txt) do ( :3 if exist D:\work\test\new_%n%.txt (set /a n ...
- 什么是文件的BOM头
1.什么是BOM? BOM是用来判断文本文件是哪一种Unicode编码的标记,其本身是一个Unicode字符("\uFEFF"),位于文本文件头部. 在不同的Unicode编码中, ...
- 什么是文件的BOM头,及BOM头有哪些坑?
1.什么是BOM? BOM是用来判断文本文件是哪一种Unicode编码的标记,其本身是一个Unicode字符("\uFEFF"),位于文本文件头部. 在不同的Unicode编码中, ...
- PHP批量去除文件BOM头
auto 是否自动替换 默认否 dir 检查目录 默认./ display 是否显示所有文件 默认只显示有bom头的文件 <?php empty($_GET['auto']) && ...
- php批量检测和去掉bom头(转)
<?php //有些php文件由于不小心保存成了含bom头的格式而导致出现一系列的问题.以下是批量清除bom头的代码 if (isset ( $_GET ['dir'] )) { //confi ...
- 关于UTF8文件带BOM头可能会引起的错误解析
今天在做一个文件上传的项目中碰到了一个十分奇怪的问题,在解析上传上来的csv文件时,总是在解析第一行的第一个标题字段时出错,就是第一个那个字段总是和对应的model字段对应不上,这个坑是真的很深,找了 ...
- java utf-8文件处理bom头
UTF? UTF,是UnicodeTransformationFormat的缩写,意为Unicode转换格式. 即怎样将Unicode定义的数字转换成程序数据.utf是对Unicode的一种编码格式化 ...
- 批量给文件去BOM(百度网盘)
链接:https://pan.baidu.com/s/1jC8RkyC0xX1lA-zZjOyDsw 提取码:geko 第一步:浏览你要移除BOM编码的文件夹.第二步:点击移除bom,随后会弹出提示框 ...
- PHP取得json前面有乱码(去除文件头部BOM)
curl请求接口时,返回结果如下: {} 想把json转换成数组或者对象,但是用json_decode返回是空的,然后用var_dump打印了一下返回结果,发现结果如下: ) 发现前面多了两个字符,因 ...
随机推荐
- AAC-ADTS
转自/*************************************************************** 作者:谭东 https://blog.csdn.net/jay10 ...
- [leetcode]265. Paint House II粉刷房子(K色可选)
There are a row of n houses, each house can be painted with one of the k colors. The cost of paintin ...
- NoSql 数据库理解
主要分类: 键值(Key-Value)存储数据库 这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据.Key/value模型对于IT系统来说的优势在于简单.易部署.但是 ...
- java命令分析线程死锁以及内存泄漏
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- centos6 下erlang安装
https://packages.erlang-solutions.com/erlang/
- Django formset
一 什么是formset Form组件或ModelForm用于做一个表单验证而formset是用于做多个表单的验证组件,用于做批量操作 二 formset的使用方法 1 设置form信息 class ...
- MySQL往表里插入千条数据 存储过程
工作中遇到的问题,先记录一下,方便以后查看 存在两张表,user表和friend表 user表部分字段,如上图 friend表部分字段,如上图 往friend表插入千条数据,friend表中的user ...
- ----关于position的四个标签----
从[ two1-4 ]分别为absolute,fixed,static,relative标签 四个标签下位移值相同,[ two2 ]和[ two1 ]都出现在左上角,[ two2 ] 盖住了[ two ...
- line number is important in Exceptions.
行号作为debug信息 在出现异常时可以迅速定位 package ztest; public class Test { public static void main(String[] args) { ...
- 前端之html概述及基本结构
html概述: HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制作网页的语言,这种语言由一个个的标 ...