PHP批量检测并去除文件BOM头信息代码

如下代码为PHP方式去除当前目录及子目录所有文件BOM信息的代码,新建文件,将其放倒根目录下,然后浏览器访问即可。

例子

将以上代码保存为后缀为php的文件放到需要去除bom的文件目录里面,然后运行该php文件,将会对该目录以及该目录所有的子目录下的文件进行bom检查并去除bom

 代码如下 复制代码

<?php
if (isset($_GET['dir'])) { //设置文件目录 
    $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) {
        if ($auto == 1) {
            $rest = substr($contents, 3);
            rewrite($filename, $rest);
            return ("<font color="red">BOM found, automatically removed._<a href="http://www.111cn.net">http://www.111cn.net</a></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
header('content-Type: text/html; charset=utf-8');
$auto=1;/*设置为1标示检测BOM并去除,设置为0标示只进行BOM检测,不去除*/
$basedir='.';
$loop=true;//www.111cn.net echo '当前查找的目录为:'.$basedir.'当前的设置是:';
echo '(1)',$loop?'检查当前目录以及当前目录的子目录':'只针对当前目录进行检测';
echo '(2)',$auto?'检测文件BOM同时去除检测到BOM文件的BOM<br />':'只检测文件BOM不执行去除BOM操作<br />';

checkdir($basedir,$loop);
function checkdir($basedir='',$loop=true){
 $basedir=empty($basedir)?'.':$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{
     if(!$loop) continue;
     $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);
}

时间: 2024-09-16 23:57:19

PHP批量检测并去除文件BOM头信息代码的相关文章

PHP批量删除、清除UTF-8文件BOM头的代码实例_php实例

记得运行代码前先把文件备份一下哦,避免出现失败问题. 代码一: 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($char

删除uft-8文件bom头信息的方法

如果您在修改任何PHP文件发生: * 不能登入或者不能登出: * 页顶出现一条空白: * 页顶出现错误警告: * 其它不正常的情况. bom文件是怎么产生呢? window编辑器如果保存为utf8文件就会帮你加上BOM头,以告诉其他编辑器以utf8来显示字符 但是在网页上并不需要添加BOM头识别,因为网页上可以使用 head头 指定charset=utf8告诉浏览器用utf8来解释.但是你用window自动的编辑器,编辑,然后有显示在网页上这样就会显示出0xEF 0xBB 0xBF这3个字符.

linux下查找包含utf8 BOM头的文件,并删除BOM头信息(FEEF)

UTF-8 编码的文件可以分为no BOM 和 BOM两种格式. 有bom头的存储或者字节流,它一定是unicode字符集编码.到底属于那一种(utf-8还是utf-16或是utf-32),通过头可以判断出来. 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码 UTF-8的BOM是 EFBBBF,因为UE载入UTF-8文件会转成Utf16,上述的EFBBBF 在Utf16中是FFFE(Unicode-LE的BOM) 1.editplus去BOM头的方法  编

PHP批量去除BOM头代码分享

        这篇文章主要介绍了PHP批量去除BOM头代码分享,本文直接给出实现代码,代码比较简单,容易看懂,需要的朋友可以参考下     ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 <?php /** * 去除bom头信息 */ header("Content-Ty

PHP批量去除BOM头内容信息代码_php实例

什么是bom头? 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因了. 批量去除bom头代码如下所示: <?php if (isset($_GET['dir'])){ //设置文件目录 $basedir=$_GET['dir']; }else{ $basedir = '.'; } $auto = 1; checkdi

PHP批量去除BOM头代码分享_php实例

<?php /** * 去除bom头信息 */ header("Content-Type:text/html; charset=utf-8"); $auto = 1; checkdir("D:\wamp\www\sales"); function checkdir($basedir){ if ($dh = opendir($basedir)) { while (($file = readdir($dh)) !== false) { if ($file != '

PHP实现UTF-8文件BOM自动检测与移除实例_php技巧

本文实例讲述了PHP实现UTF-8文件BOM自动检测与移除的方法.分享给大家供大家参考.具体实现方法如下: BOM信息是文件开头的一串隐藏的字符,用于让某些编辑器识别这是个UTF-8编码的文件.但PHP在读取文件时会把这些字符读出,从而形成了文件 开头含有一些无法识别的字符的问题. 比如用UTF-8格式保存的生成图片的PHP文件,因为文件头隐藏的BOM信息也被下发,导致生成的 图片数据不对,浏览器无法识别. 要检测一个UTF-8文件是否含有BOM信息,就是检测文件开头的字三个符,是否为0xEF,

BAT批量去除文件首行以及批量合并文件脚本_DOS/BAT

bat批量去除文件首行 复制代码 代码如下: set n=1 :starline for %%j in (*.txt) do ( :3 if exist D:\work\test\new_%n%.txt (set /a n+=1&goto 3) set file=%n%.txt for /f "skip=1 delims=" %%i in ('type "%file%"') do ( echo %%i >>D:\work\test\new_%n%

UTF-8编码怎么去掉BOM头?

Unicode规范中有一个BOM的概念.BOM--Byte Order Mark,就是字节序标记.在这里找到一段关于BOM的说明: 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF.而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中.UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE".这样如果接收者收到FEFF,就表明这个字节流是Big-Endia