dedeCMS等类似系统将gbk版本转换为utf-8版本(gbk to utf-8)

来源:互联网 发布:mac电脑的杀毒软件 编辑:程序博客网 时间:2024/06/05 04:49

一、为什么要将gbk转换为utf-8?gbk编码与utf-8有什么区别?

在织梦DedeCMS官方发布的版本中(其他的如discuz等),主要有两个版本。一个是GBK版本,一个是UTF-8版本,从程序实现的功能上来说,织梦Dedecms的GBK版本与UTF-8版本功能是一样的,没有本质的区别,只不过编码方式不同而已。
物尽其用,织梦出这两个版本的原因也是为了满足不同人的不同需要,只要能实现你想要的功能,用哪个版本的区别不是很大。当然,细微区别还是有的,不然也没必要出两个版本了。具体如下:

  1. GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的网站则用UTF-8节省空间。
  2. GBK包含中日韩字符集合,他能完美支持简体中文和英文,但如果在IE没有安装简体中文支持的电脑上阅读GBK编码的网页,中文会变成乱码;UTF-8则包含全世界所有国家需要用到的字符。
  3. GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准,UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示。比如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,而无需他们下载IE的中文语言支持包。 所以,对于英文比较多的论坛 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。
简单的说
如果你的网站客户群体主要是面向国内用户的,建议使用GBK版本,因为它可以节省空间,并且相对utf-8版本来讲稳定一些。织梦论坛上的很多插件也都支持GBK版本的。如果你的网站有很多其他的程序,比如要整合论坛、博客什么的,可以使用UTF-8版本,因为比较通用,不会造成错码等错误。

为了将dedecms与discuz更好的整合,决定将(已经二次开发到了一半的)dedecms系统的编码转换为utf-8。主要有两步,一是数据库编码的转换;另一个是代码本身编码的转换。

二、数据库编码的转换,原来的是gbk_chinese_ci,现要将其转换为utf8_general_ci

  1. 使用mysqldump导出表结构,如:
    mysqldump -d -uroot -p 数据库名 > /home/hui/struct.sql

  2. 使用mysqldump以特定编码导出数据(其中utf8为所需编码,可按需修改),如:
    mysqldump --default-character-set=utf8 -t -uroot -p 数据库名 > /home/hui/data.sql

  3. 打开表结构转存(/home/hui/struct.sql),将所有CREATE TABLE中的编码替换为所需编码;
    用vi替换的语句: :%s/gbk/utf8/g#这里是将gbk替换为utf8

  4. 进入mysql控制台,导入表结构与数据:(执行语句前需建好要导入的数据库)
    source /home/hui/struct.sql;source /home/hui/data.sql;

数据库编码转换完成,注:用的是mysql数据库管理系统。

三、代码编码转换

有两部份,一是将html页面设置的头部编码修改,即将

<meta http-equiv="Content-Type" content="text/html; charset=gbk}"> 

 头部编码设置为utf-8,以dedecms为例,在/include/common.inc.php里面,找到$cfg_soft_lang,并将其设置为utf-8即可。

第二种是代码本身自己的编码要转换为utf-8。这里采用了shell脚本来进行转换,如下:

  1 #/bin/bash  2 #convert encoding to UTF-8  3 if [ "$#" != "1" ]  4     then  5         echo "Usage:`basename $0` dir "  6         exit  7 fi  8   9 dir=$1 10 echo $1 11  12 for file in `find $dir -name "*.php" -o -name "*.htm" -o -name "*.html" -o -name "*.js" -o -name "*.css" -o -name "*.txt"` 13 do 14     echo "$file" 15     enconv $file 16 done

不熟悉enconv的童鞋可以参照:《安装enca》,也可以用iconv来转换: 

iconv -f gbk -t utf8 -o $file $file

编码转换之后,去缓存,更新网站,重新生成静态页即可。

原创粉丝点击