程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 網站文件批量轉碼

網站文件批量轉碼

編輯:關於PHP編程

引:   由於數據庫要求,數據庫由原gbk2312編碼更改為utf-8,為方便數據交互減少編碼不一致引起的問題,

      需要將網站整站轉碼(gb2312-->utf-8)

一  在網上找批量轉碼工具

  

 

  注意: 1.這個軟件支持選擇文件,或者選擇目錄,有部分可選類型,也可以是所有文件,提供方便的同時也要細心。查看所選文件裡是否有不需要轉碼的文件,如不同編碼的文件,圖片等,一定不要一起給轉了。

              2.沒有去重功能,所以注意不要重復選擇文件(重復選擇會怎麼樣,我還試)
              3. 若勾選”保留文件備份“,則每個文件都有一個對應的bak文件生成,由於我項目已經用git管理了,所以不需要備份(git自己有恢復功能),怎麼備份法看具體情況吧,反正這大動作還是要慎重的。

 


二,去除bom頭
       使用EditPlus編輯器打開剛才轉碼過的文件,底部狀態欄顯示編碼為”UTF-8+“,即含有bom頭.

        什麼是bom? 引用網友一段話"在utf-8編碼文件中BOM在文件頭部,占用三個字節,用來標示該文件屬於utf-8編碼,現在已經有很多軟件識別bom頭,但是還有些不能識別bom頭,比如PHP就不能識別bom頭,這也是用記事本編輯utf-8編碼後執行就會出錯的原因了.

        這樣在php執行程序的時候會將bom頭作為內容輸出,在遇到要求不能有輸出的時候,如session_start()就會出錯。

        單個文件,用editplus編輯器打開另存為無‘utf-8’(即無bom)的文件即可。

        對於這麼多文件,有網友分享了一段腳本,快速批量准確的去除bom頭(沒查到原作者,在此感謝高人分享~),在被轉碼文件的根目錄下建一個php文件,以下代碼拷貝進去,在url中輸入訪問地址,執行即可:

        <?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.k686.com>http://www.k686.com</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);  
}  
?>
三,使用強大的ZendSdio批量查找替換htm中申明的gb2312的編碼為utf-8

        注意:新建的zend工程,查看htm是否正常顯示,如果是亂碼,查看工程htm的編碼是否設置為utf-8,         選中工程,全局搜索(ctrl+H)“charset=gb2312”批量替換為“charset=utf-8”,

        注意:可能某些引入項目外部的文件,需要保持申明為gb2312,所以,就需要排除這些例外,不可一起被替換,而對於本次已被轉碼的文件,是需要被替換的。

                    另外可能還有有空格的如“charset=  gb2312”,沒空格的,各種寫法都搜一搜。以防有漏網之魚。

四,然後重點是php文件裡的gb2312(或gbk),要結合上下文邏輯語境,確定是否需要替換。各種寫法也要都搜一搜,如utf8,utf-8,gbk,gb2312等


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved