原理:

找出文件前3个字符

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

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

代码实现如下:

  1. $basedir = isset($_GET['dir']) ? $_GET['dir'] : ".";
  2. $auto = 1;
  3. $auto = isset($_GET['auto']) ? $_GET['auto'] : $auto;
  4.  
  5. checkdir($basedir);
  6. function checkdir($basedir)
  7. {
  8. if ($dh = opendir($basedir)) {
  9. while (($file = readdir($dh)) !== false) {
  10. if ($file != '.' && $file != '..') {
  11. if (!is_dir($basedir . "/" . $file)) {
  12. echo "filename: $basedir/$file " . checkBOM("$basedir/$file") . " <br>";
  13. } else {
  14. $dirname = $basedir . "/" . $file;
  15. checkdir($dirname);
  16. }
  17. }
  18. }
  19. closedir($dh);
  20. }
  21. }
  22. function checkBOM($filename)
  23. {
  24. global $auto;
  25. $contents = file_get_contents($filename);
  26. $charset[1] = substr($contents, 0, 1);
  27. $charset[2] = substr($contents, 1, 1);
  28. $charset[3] = substr($contents, 2, 1);
  29. if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
  30. if ($auto == 1) {
  31. $rest = substr($contents, 3);
  32. rewrite($filename, $rest);
  33. return ("<font color='red'>BOM found, automatically removed.</font>");
  34. } else {
  35. return ("<font color='red'>BOM found.</font>");
  36. }
  37. } else
  38. return ("BOM Not Found.");
  39. }
  40. function rewrite($filename, $data)
  41. {
  42. $filenum = fopen($filename, "w");
  43. flock($filenum, LOCK_EX);
  44. fwrite($filenum, $data);
  45. fclose($filenum);
  46. }

  

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. jQuery ui 框架

    jQuery ui框架很多,除了官方提供的jquery UI(如果你还不知道什么是jQuery UI,请看下载了jquery ui后如何使用),还有很多第三方提供的ui框架,因官方提供的jquery ...

  2. Python-11-RabbitMQ、Redis使用

    RabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(M ...

  3. ionic 开发笔记

    1.AngularJS 外部的控制器(DOM 事件.外部的回调函数如 jQuery UI 空间等)调用了 AngularJS 函数之后,必须调用$apply.在这种情况下,你需要命令 AngularJ ...

  4. 基于FPGA的飞机的小游戏

    基于FPGA的飞机的小游戏 实验原理 该实验主要分为4个模块,采用至上而下的设计方法进行设计.由50M的晶振电路提供时钟源,VGA显示控制模块.图形显示控制模块.移动模块的时钟为25M,由时钟分频电路 ...

  5. string.IsNullOrEmpty和string.IsNullOrWhiteSpace方法的区别

    string.IsNullOrEmpty 都知道,这个功能是判断字符串是否为:null或者string.Empty.如果是如"\t"这样的字符就返回false了,为了达到判断过滤这 ...

  6. PHP "延迟静态绑定" 功能,static

    从这个名字的定义提取出两个关键点,第一点静态,也就是说这个功能只适用于静态属性或静态方法.第二点延迟绑定,这个根据下面代码就可以很好的理解 看一下这个例子: class A{ static $name ...

  7. Samba服务配置简明笔记

    内部服务器之间拷贝数据,用root账号访问,没有做更复杂的设置. 1.用YUM安装samba服务器端及客户端: [root@tenjs05 init.d]# yum install samba sam ...

  8. 这些年MAC下我常用的那些快捷键

    Command + H:隐藏窗口 Command + M:最小化窗口 Command + N:新建 Command + O:打开 Command + S:保存 Command + shift+S:另存 ...

  9. 自然语言25_nltk.book

    测试NLTK数据包 导入nltk.book包中所有的东西: 能使用以下函数的是nltk.text.Text对象 from nltk.book import * text1.concordance(&q ...

  10. margin和padding的区别

    目前web2.0已经越来被人们认可,因为喜欢搞web开发的人员不得不硬着头皮去学习web2.0的标准,其中很重要的一条就是新的布局规则,div+css.以前基本上是用table布局的,这种传统的方式简 ...