PHP 去掉 utf8格式文件中的bom头部 |
时间:2015-01-23 来源:西部数据 作者:西部数据 |
|
我们有时要去掉utf8文档中头部我们经常会需要手工清除了,下面我整理了几个利用php程序清除 utf8格式文件中的bom头部方法.
PHP实例1,代码如下:
-
-
-
-
-
- function clearbom($contents){
-
- $BOM = chr(239).chr(187).chr(191);
- return str_replace($BOM,'',$contents);
- }
-
-
-
-
-
-
- function clearfilebom($fileName){
- $c = file_get_contents($fileName);
- $c = clearbom($c);
- file_put_contents($fileName,$c);
- }
PHP实例例2,代码如下:
- <?php
-
-
-
- $basedir=".";
- $auto=1;
-
-
-
- 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
-
- $HOME = dirname(__FILE__);
-
- $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;
-
- $content = substr($content,3);
-
- file_put_contents($sHOME . $win32 . $file, $content);
- }
- }
- }
- }
- $folder->close();
- if(count($foundfolders) > 0) {
- foreach ($foundfolders as $folder) {
- RecursiveFolder($folder, $win32);
- }
- }
- }
-
- function SearchBOM($string) {
- if(substr($string,0,3) == pack("CCC",0xef,0xbb,0xbf)) return true;
- return false;
- }
- ?>
- </body>
- </html>
|
|
|
|