前面已介绍了全站编码转换的基本概念:
现在来看看如何操作:
请千万注意,实施下面操作前一定要备份文件,最好全站备份!
第一步:用Dreamweaver搜索全站,将需要的文件中的所有meta中的charset=gb2312批量替换为charset=utf-8。
我查了所有的方法:只有Dreamweaver可以真正实现全站批量搜索替换(注意:只替换站中需要转换文件编码的文件中的meta charset=gb2312)。
而在utf-8编码下,所有工具的批量搜索替换均无效!
所以,meta替换必须在文件转码前完成,或在转码utf-8后自已遍历文件夹替换!
第二步:全站文件批量转换:
这里提供了一个我自已写的函数,可遍历文件夹根据文件类型转码:
(注意,使用时一定小心,不要提供不相关的路径)
set_time_limit (0);
function get_all_files($path) {
if (empty($path)) die('没有给定目录');
// $list = array();
foreach(glob($path . '\*') as $item) {
if (is_dir($item)) {
get_all_files($item);
// $list = array_merge($list , get_all_files($item));
} else {
// 如果是文件
// $list[] = $item;
// 处理文件
$path = $item;
$arr_path = pathinfo($path);
$extension = strtolower($arr_path["extension"]);
if ($extension == 'php' or $extension == 'html' or $extension == 'htm' or $extension == 'tpl' or $extension == 'css' or $extension == 'js') {
$aa = mb_detect_encoding(file_get_contents($item), "UTF-8,gb2312,EUC-CN,UCS-2,ASCII,UCS-2BE,UCS-2LE,ISO-8859-1,BIG-5,HZ");
echo $aa;
if ($aa == "EUC-CN") {
// string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
file_put_contents($item, mb_convert_encoding(file_get_contents($item), "UTF-8", "GB2312"));
//file_put_contents($item, iconv("GB2312", "UTF-8", file_get_contents($item)));
echo $item . ' 中文被成功转码
';
} else {
echo $item . ' 已是utf8,不用转码
';
}
// file_put_contents($item, iconv("GB2312", "UTF-8", file_get_contents($item)));
} else {
echo $item . ' 未转码
';
}
}
}
return $list;
}
get_all_files($dir);
调用get_all_files($dir);即可遍历文件夹下的所有文件进行转码,转为utf-8;
第三步:将数据库转为utf8,数据库不转utf8是不全面的,因为一些字符将无法保存!
这个可以将数据库的默认编码设为utf8,如果是均是mysql5版本的,导入时选择utf8编码即可,如果是mysql4的,要复杂的多,请参照其他文档!
第四步:测试全站看是否成功转码。
最后提示:
1、最好在所有要输出文件中加一个header("Content-Type: text/html; charset=utf-8");强制设定编码
2、注意utf-8的BOM对文件引用和显示的影响!
写的很简单,实际操作中有很多问题!你可以论坛中提问解决!
本文永久链接: http://www.zzxj.net/blog/fxs_2008/archive/2009/02/12/19.html
发表于 @ 2009年02月12日 |评论(loading... )|收藏