聯想到discuz,ecshop發佈一個新版本的系統給你們使用,會提供utf-8,gb2312版本的代碼下載。因此確定是批量轉換編碼出來的。php
這種是轉換html文件。html
http://blog.csdn.net/iseagold/article/details/5472377瀏覽器
我須要找一個批量轉換文件編碼的工具才行。ide
問題在於:目錄中混合了gb2312和utf8編碼的。如何才能用工具去自動判斷呢。函數
不要強制轉換一次編碼。工具
gb2312和utf8編碼的。若是是utf8編碼的文件,就不要轉換,若是是gb2312的編碼才執行轉換成utf8編碼。ui
http://blog.csdn.net/liu_qiqi/article/details/38706497編碼
php的mb_detect_encoding函數,我正準備試一試:
function characet($data){
if( !empty($data) ){
$filetype = mb_detect_encoding($data , array('utf-8','gbk','latin1','big5')) ;
if( $filetype != 'utf-8'){
$data = mb_convert_encoding($data ,'utf-8' , $filetype);
}
}
return $data;
}spa
<?php header("Content-type: text/html; charset=utf-8"); /* * +--------------------------------------------------- * 遍歷指定目錄,造成一個目錄句柄返回 * +--------------------------------------------------- * * +--------------------------------------------------- */ function explorer_dir($sDir) { static $aTempArr = array(); $dp = opendir($sDir); while ($sFileName = readdir($dp)) { if ($sFileName != '.' && $sFileName != '..') { $sPath = $sDir . "/" . $sFileName; if (is_dir($sPath)) { explorer_dir($sPath); } else { // $filetime=date("Y-m-d H:i:s",filectime("$path")); // $fp=$path.",".$filetime; $fp = $sPath; $aTempArr[] = $fp; } } } closedir($dp); return $aTempArr; } /* * +---------------------------------------------------------------------- * //搜索指定目錄下的gb2312編碼文件,轉換成utf-8編碼文件 * +---------------------------------------------------------------------- */ function change_gb2312_to_utf8_dir($dir) { $all_dirs = explorer_dir($dir); $suffix_list = array('php', 'htm', 'html', 'txt', 'js'); echo 'get files count:'; echo count($all_dirs) . '<br />'; $i = 0; foreach ($all_dirs as $dir_key => $file_path) { $file_content = file_get_contents($file_path); $i++; echo $i . '、' . $file_path.'<br />'; var_dump($file_encode_type = mb_detect_encoding($file_content, array('UTF-8', 'EUC-CN'), true)); //EUC-CN是gb2312的另外稱呼,php這個擴展返回的是值,不是gb2312 echo '<br />'; //獲取文件的後綴,指定文件類型採起作操做,好比圖片就不能去修改的 $file_name = basename($file_path); $suffix = get_file_suffix($file_name); if (in_array($suffix, $suffix_list)) { if ($file_encode_type == 'EUC-CN') { echo '<font color="red">had changed the file from ' . $file_encode_type . '(gb2312) to UTF-8:' . $file_path . '</font><br /><br />'; //就是gb2312編碼的 $after_change_encode_content = iconv("gb2312", "UTF-8", $file_content); unlink($file_path); file_put_contents($file_path, $after_change_encode_content); unset($after_change_encode_content); } } else { echo '<font color="red">the file not in allow file type:' . $file_path . '</font><br /><br />'; } unset($file_content); echo '--------------------------------------------------------------------<br /><br />'; } } /* * +---------------------------------------------------------------------- * //搜索指定目錄下指定編碼的文件,目的就是幫助咱們看出本身的項目哪些是什麼編碼的文件 * +---------------------------------------------------------------------- */ function dir_file_encode_list($dir) { $all_dirs = explorer_dir($dir); echo 'get files count:'; echo count($all_dirs) . '<br />'; $i = 0; foreach ($all_dirs as $dir_key => $file_path) { $file_content = file_get_contents($file_path); $i++; echo $i . '、' . $file_path.'<br />'; var_dump($file_encode_type = mb_detect_encoding($file_content, array('UTF-8', 'EUC-CN'), true)); //EUC-CN是gb2312的另外稱呼,php這個擴展返回的是值,不是gb2312 echo '<br />'; unset($file_content); echo '--------------------------------------------------------------------<br /><br />'; } } /* * +---------------------------------------------------------------------- * 掃描指定目錄下的指定目錄下的html文件,批量將裏面的 * <meta http-equiv="Content-Type" content="text/html; charset=gbk" /> * 指定的編碼替換成另一個編碼 * +---------------------------------------------------------------------- */ function replace_html_charset($dir) { $all_dirs = explorer_dir($dir); $suffix_list = array('htm', 'html','php'); echo 'get files count:'; echo count($all_dirs) . '<br />'; $i = 0; $charset = '<meta http-equiv="Content-Type" content="text/html; charset=gbk" />'; $to_charset = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'; foreach ($all_dirs as $dir_key => $file_path) { $file_content = file_get_contents($file_path); $i++; echo $i . '、' . $file_path.'<br />'; //獲取文件的後綴,指定文件類型採起作操做,好比圖片就不能去修改的 $file_name = basename($file_path); $suffix = get_file_suffix($file_name); if (in_array($suffix, $suffix_list)) { $patten = '%' . $charset . '%i'; if (preg_match($patten, $file_content)) { $after_change_encode_content = str_ireplace($charset, $to_charset, $file_content); unlink($file_path); file_put_contents($file_path, $after_change_encode_content); unset($after_change_encode_content); echo 'find limit :' . $file_path . '<br /><br />'; } }else{ echo '<font color="red">the file not in allow file type:' . $file_path . '</font><br /><br />'; } } } //dir_file_encode_list("D:\\static\\develop\\mama\\test_change_encode"); //change_gb2312_to_utf8_dir("D:\\static\\develop\\mama\\test_change_encode"); //replace_html_charset("D:\\static\\develop\\mama\\test_change_encode"); function get_file_suffix($file_name){ $file_name_arr = explode(".", $file_name); $suffix = array_pop($file_name_arr); return $suffix; }