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

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

发布时间:2023-06-13 13:00:31 所属栏目:PHP教程 来源:
导读:我们有时要去掉utf8文档中头部我们经常会需要手工清除了,下面我整理了几个利用php程序清除 utf8格式文件中的bom头部方法.

PHP实例1,代码如下:

/**
* 去掉文件中的 bom头
* @var 0.1
* @author Chenwp
我们有时要去掉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> 

(编辑:汽车网)

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

    推荐文章