Heim >php教程 >php手册 >网站文件批量转码

网站文件批量转码

WBOY
WBOYOriginal
2016-06-13 10:52:49952Durchsuche

引:   由于数据库要求,数据库由原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中输入访问地址,执行即可:

        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")."
";  
    }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 ("BOM found, automatically removed._http://www.k686.com");  
  } else {  
   return ("BOM found.");  
  }  
}  
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等


 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn