当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2014-07-04 09:22:36 浏览: 评论:0 

我们有时要去掉utf8文档中头部我们经常会需要手工清除了,下面我整理了几个利用php程序清除 utf8格式文件中的bom头部方法.

PHP实例1,代码如下:

  1. /** 
  2.  * 去掉文件中的 bom头 
  3.  * @var 0.1 
  4.  * @author Chenwp 
  5.  */ 
  6. function clearbom($contents){     
  7.     //UTF8 去掉文本中的 bom头 
  8.     $BOM = chr(239).chr(187).chr(191);  
  9.     return str_replace($BOM,'',$contents);     
  10.  
  11. /** 
  12.  * 去掉文件中的bom头 
  13.  * @param object $fileName Description 
  14.  * @return object    Description 
  15.  */ 
  16. function clearfilebom($fileName){ 
  17.     $c = file_get_contents($fileName); 
  18.     $c = clearbom($c); 
  19.     file_put_contents($fileName,$c); 

PHP实例例2,代码如下:

  1. <?php 
  2.  
  3. //此文件用于快速测试UTF8编码的文件是不是加了BOM,并可自动移除 
  4.  
  5. $basedir="."//修改此行为需要检测的目录,点表示当前目录 
  6. $auto=1; //是否自动移除发现的BOM信息。1为是,0为否。 
  7.  
  8. //以下不用改动 
  9.  
  10. if ($dh = opendir($basedir)) { 
  11.        while (($file = readdir($dh)) !== false) { 
  12.        if ($file!='.' && $file!='..' && !is_dir($basedir."/".$file)) echo "filename: $file ".checkBOM("$basedir/$file")." <br>"
  13.        } 
  14.        closedir($dh); 
  15.  
  16. function checkBOM ($filename) { 
  17.        global $auto
  18.        $contents=file_get_contents($filename); 
  19.        $charset[1]=substr($contents, 0, 1);  
  20.        $charset[2]=substr($contents, 1, 1);  
  21.        $charset[3]=substr($contents, 2, 1);  
  22.        if (ord($charset[1])==239 && ord($charset[2])==187 && ord($charset[3])==191) { 
  23.             if ($auto==1) { 
  24.                   $rest=substr($contents, 3); 
  25.                   rewrite ($filename$rest); 
  26.                   return ("<font color=red>BOM found, automatically removed.</font>"); 
  27.             } else { 
  28.                   return ("<font color=red>BOM found.</font>"); 
  29.             } 
  30.         }  
  31.          else return ("BOM Not Found."); 
  32.  
  33. function rewrite ($filename$data) { 
  34.         $filenum=fopen($filename,"w"); 
  35.         flock($filenum,LOCK_EX); 
  36.         fwrite($filenum,$data); 
  37.         fclose($filenum); 
  38. //结束 
  39. ?> 

PHP实例3,代码如下:

  1. <?php  
  2. // 设定你要清除BOM的根目录(会自动扫描所有子目录和文件) 
  3. $HOME = dirname(__FILE__); 
  4. // 如果是Windows系统,修改为:$WIN = 1; 
  5. $WIN = 0; 
  6. ?> 
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  8. <html xmlns="http://www.w3.org/1999/xhtml"
  9. <head> 
  10. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  11. <title>UTF8 BOM 清除器</title> 
  12. <style> 
  13. body { font-size: 10px; font-family: Arial, Helvetica, sans-serif; background: #FFF; color: #000; } 
  14. .FOUND { color: #F30; font-size: 14px; font-weight: bold; } 
  15. </style> 
  16. </head> 
  17. <body> 
  18. <?php 
  19. $BOMBED = array(); 
  20. RecursiveFolder($HOME); 
  21. echo '<h2>These files had UTF8 BOM, but i cleaned them:</h2><p class="FOUND">'
  22. foreach ($BOMBED as $utf) { echo $utf ."<br />n"; } 
  23. echo '</p>'
  24. // 递归扫描 
  25. function RecursiveFolder($sHOME) { 
  26.  global $BOMBED$WIN
  27.  $win32 = ($WIN == 1) ? "\" : "/"; 
  28.  $folder = dir($sHOME); 
  29.  $foundfolders = array(); 
  30.  while ($file = $folder->read()) { 
  31.   if($file != "." and $file != "..") { 
  32.    if(filetype($sHOME . $win32 . $file) == "dir"){ 
  33.     $foundfolders[count($foundfolders)] = $sHOME . $win32 . $file
  34.    } else { 
  35.     $content = file_get_contents($sHOME . $win32 . $file); 
  36.     $BOM = SearchBOM($content); 
  37.     if ($BOM) { 
  38.      $BOMBED[count($BOMBED)] = $sHOME . $win32 . $file
  39.      // 移出BOM信息 
  40.      $content = substr($content,3); 
  41.      // 写回到原始文件 
  42.      file_put_contents($sHOME . $win32 . $file$content); 
  43.     } 
  44.    } 
  45.   } 
  46.  } 
  47.  $folder->close(); 
  48.  if(count($foundfolders) > 0) { 
  49.   foreach ($foundfolders as $folder) { 
  50.    RecursiveFolder($folder$win32); 
  51.   } 
  52.  } 
  53. // 搜索当前文件是否有BOM 
  54. function SearchBOM($string) {  
  55.   if(substr($string,0,3) == pack("CCC",0xef,0xbb,0xbf)) return true; 
  56.   return false;  
  57. ?> 
  58. </body> 
  59. </html> 

Tags: utf8格式文件 bom头部

分享到: