fxs_2008:网站全站由GB2312转utf-8编码实录(二) 收藏
2009年02月12日


前面已介绍了全站编码转换的基本概念:

现在来看看如何操作:

请千万注意,实施下面操作前一定要备份文件,最好全站备份!

第一步:用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... )|收藏

发表评论 姓  名: