原理:

找出文件前3个字符

如果它们对应的ASCII 值分别是  239,187,191

则判断为bom头,去掉前3个字符.

代码实现如下:

$basedir =  isset($_GET['dir'])  ? $_GET['dir'] : ".";
$auto = 1;
$auto = isset($_GET['auto']) ? $_GET['auto'] : $auto; 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) {
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);
}

  

PHP 版去bom头的更多相关文章

  1. 批量去BOM头 遍历目录及子文件,文件夹 PHP源码

    任意php文件,把最后一行替换成自己的目录 即可 <?php class KillBom {     public static $m_Ext = ['txt', 'php', 'js', 'c ...

  2. 去bom头

    function rewrite ($filename, $data) { $filenum = fopen($filename, "w"); flock($filenum, LO ...

  3. 详解BOM头以及去掉BOM头的方法

    类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM).它是一串隐藏的字符,用于让记事本等编辑器识别 ...

  4. 有关BOM头的一些知识

    在psr开发标准中,有一条是讲的,php只能使用无bom的utf8格式 . 那么这个bom是几个意思.  说一些理论内容 . 在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK ...

  5. linux中截取文件的特定字节(去掉utf-8 bom头)

    事出有因,之所以要截取特定字节,是为了给utf-8编码的文件去掉bom头. bom头好去啊,notepad++文本编辑器中就有这个功能啊.可是,问题所在是要编辑的文件太大了,300MB,小电脑卡shi ...

  6. 详解BOM头以及去掉BOM头的方法--踩过BOM的大坑

    类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM).它是一串隐藏的字符,用于让记事本等编辑器识别 ...

  7. bom头解释方法和去掉方法

    什么是bom头? 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也 ...

  8. 什么是BOM头(字节顺序标记(ByteOrderMark))

    在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑ut ...

  9. 使用editplus等编程工具时UTF-8编码去掉BOM头方法(转载备查)

            Unicode规范中有一个BOM的概念.BOM——Byte Order Mark,就是字节序标记.在这里找到一段关于BOM的说明: 在UCS 编码中有一个叫做"ZERO WI ...

随机推荐

  1. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 远程同步服务器大量基础数据到客户端

    服务器上保存有上万条的基础数据,需要同步到全国各地的成千上万个客户端,而且这些基础数据也经常在有变化调整.这时候需要有一个稳定的数据同步程序,能分批同步基础数据,由于网络流量,网络的稳定性等因素,需要 ...

  2. 如何使用Log4net创建日志及简单扩展

    第一步:在项目中添加对log4net.dll的引用,这里引用版本是1.2.10.0.第二步:程序启动时读取log4net的配置文件.如果是CS程序,在根目录的Program.cs中的Main方法中添加 ...

  3. VS2012使用Git并连接到osc@git

    1.下载GitExtensions并安装 在http://sourceforge.net/projects/gitextensions/files/latest/download 下载 安装时请注意 ...

  4. Redis作为消息队列服务场景应用案例

    NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例   一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...

  5. docfx daylybuild

    参考:https://myget.org/gallery/docfx-dev 根据对应的vs或nuget版本中添加地址. PS:daylybuild可能包含很多错误哦.

  6. sql特殊语句

    1.联表查询 select * from zongyi zongyiitem where zongyi.id=zongyiitem.id 2.联表删除 delete from zongyi ,zong ...

  7. Javascript随记

    一, 理解Javascript的运行环境概念 function say(msg) { alert(this + ' says ' + msg); } var tt = { message: 'Jame ...

  8. 虚拟机VMware 12 Pro 永久许可证激活密钥

    热门虚拟机软件VMware Workstation Pro现已更新至v12.5.2.12.0属于大型更新,专门为Win10的安装和使用做了优化,支持DX10.4K高分辨率显示屏.OpenGL 3.3. ...

  9. 用类(function(){})()实现点击显示index索引值的详解

    code: <script type="text/javascript"> ; i < ; i++){ var btn = document.createElem ...

  10. Mysql 查询练习

    Mysql 查询练习 ---创建班级表 create table class( cid int auto_increment primary key, caption ) )engine=innodb ...