网站文件批量转码_PHP教程

php中文网
发布: 2016-07-14 10:06:41
原创
1270人浏览过

引:   由于数据库要求,数据库由原gbk2312编码更改为utf-8,为方便数据交互减少编码不一致引起的问题,

      需要将网站整站转码(gb2312-->utf-8)

一  在网上找批量转码工具

  

 

立即学习PHP免费学习笔记(深入)”;

  注意: 1.这个软件支持选择文件,或者选择目录,有部分可选类型,也可以是所有文件,提供方便的同时也要细心。查看所选文件里是否有不需要转码的文件,如不同编码的文件,图片等,一定不要一起给转了。

              2.没有去重功能,所以注意不要重复选择文件(重复选择会怎么样,我还试)
              3. 若勾选”保留文件备份“,则每个文件都有一个对应的bak文件生成,由于我项目已经用git管理了,所以不需要备份(git自己有恢复功能),怎么备份法看具体情况吧,反正这大动作还是要慎重的。

 

立即学习PHP免费学习笔记(深入)”;


二,去除bom头
       使用EditPlus编辑器打开刚才转码过的文件,底部状态栏显示编码为”UTF-8+“,即含有bom头.

        什么是bom? 引用网友一段话"在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因了.

绘蛙-多图成片
绘蛙-多图成片

绘蛙新推出的AI图生视频工具

绘蛙-多图成片 133
查看详情 绘蛙-多图成片

        这样在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等


 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477921.htmlTechArticle引: 由于数据库要求,数据库由原gbk2312编码更改为utf-8,为方便数据交互减少编码不一致引起的问题, 需要将网站整站转码(gb2312--utf-8)...
相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号