加入收藏 | 设为首页 | 会员中心 | 我要投稿 上海站长网 (https://www.021zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP 去除 utf8格式文件中的bom头部

发布时间:2022-01-23 05:03:44 所属栏目:PHP教程 来源:互联网
导读:我们有时要去掉utf8文档中头部我们经常会需要手工清除了,下面我整理了几个利用php程序清除 utf8格式文件中的bom头部方法. PHP实例1,代码如下: /** * 去掉文件中的 bom头 * @var 0.1 * @author Chenwp */ function clearbom($contents){ //UTF8 去掉文本中
  我们有时要去掉utf8文档中头部我们经常会需要手工清除了,下面我整理了几个利用php程序清除 utf8格式文件中的bom头部方法.
 
  PHP实例1,代码如下:
 
  /**
   * 去掉文件中的 bom头
   * @var 0.1
   * @author Chenwp
   */
  function clearbom($contents){     
      //UTF8 去掉文本中的 bom头
      $BOM = chr(239).chr(187).chr(191);  
      return str_replace($BOM,'',$contents);     
  }
  
  /**
   * 去掉文件中的bom头
   * @param object $fileName Description
   * @return object    Description
   */
  function clearfilebom($fileName){
      $c = file_get_contents($fileName);
      $c = clearbom($c);
      file_put_contents($fileName,$c);
  }
  PHP实例例2,代码如下:
 
  <?php
  
  //此文件用于快速测试UTF8编码的文件是不是加了BOM,并可自动移除
  
  $basedir="."; //修改此行为需要检测的目录,点表示当前目录
  $auto=1; //是否自动移除发现的BOM信息。1为是,0为否。
  
  //以下不用改动
  
  if ($dh = opendir($basedir)) {
         while (($file = readdir($dh)) !== false) {
         if ($file!='.' && $file!='..' && !is_dir($basedir."/".$file)) echo "filename: $file ".checkBOM("$basedir/$file")." <br>";
         }
         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实例3,代码如下:
 
  <?php  
  // 设定你要清除BOM的根目录(会自动扫描所有子目录和文件)
  $HOME = dirname(__FILE__);
  // 如果是Windows系统,修改为:$WIN = 1;
  $WIN = 0;
  ?>
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>UTF8 BOM 清除器</title>
  <style>
  body { font-size: 10px; font-family: Arial, Helvetica, sans-serif; background: #FFF; color: #000; }
  .FOUND { color: #F30; font-size: 14px; font-weight: bold; }
  </style>
  </head>
  <body>
  <?php
  $BOMBED = array();
  RecursiveFolder($HOME);
  echo '<h2>These files had UTF8 BOM, but i cleaned them:</h2><p class="FOUND">';
  foreach ($BOMBED as $utf) { echo $utf ."<br />n"; }
  echo '</p>';
  // 递归扫描
  function RecursiveFolder($sHOME) {
   global $BOMBED, $WIN;
   $win32 = ($WIN == 1) ? "/" : "/";
   $folder = dir($sHOME);
   $foundfolders = array();
   while ($file = $folder->read()) {
    if($file != "." and $file != "..") {
     if(filetype($sHOME . $win32 . $file) == "dir"){
      $foundfolders[count($foundfolders)] = $sHOME . $win32 . $file;
     } else {
      $content = file_get_contents($sHOME . $win32 . $file);
      $BOM = SearchBOM($content);
      if ($BOM) {
       $BOMBED[count($BOMBED)] = $sHOME . $win32 . $file;
       // 移出BOM信息
       $content = substr($content,3);
       // 写回到原始文件
       file_put_contents($sHOME . $win32 . $file, $content);
      }
     }
    }
   }
   $folder->close();
   if(count($foundfolders) > 0) {
    foreach ($foundfolders as $folder) {
     RecursiveFolder($folder, $win32);
    }
   }
  }
  // 搜索当前文件是否有BOM
  function SearchBOM($string) {  
    if(substr($string,0,3) == pack("CCC",0xef,0xbb,0xbf)) return true;
    return false;  
  }
  ?>
  </body>
  </html>
 

(编辑:上海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!