完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题

[作者]:domecc
[欢迎各位提出疑问]:chweifly[at]gmail[dot]com
[原创作品,转载请注明来源]:XOOPS China!

引言
MySQL为解决并控制不同层次的不同字符编码问题,在4.1以上版本对字符集的支持细化到四个层次: 服务器(server)、数据库(database)、数据表(table)和连接(connection)。
MySQL通过以下三个方面来控制各个层次的字符编码:MySQL字符集(Character set)、MySQL连接校对(Collation,整理)以及站点编码。

但是控制的细化往往造成了复杂性,稍有不慎就有可能出现乱码问题。

问题描述
1、基本配置:
1)XOOPS程序2.25简体中文版,编码gb2312;
2)WAMP5 1.6.0(个人认为比AppServ好的多),其中MySQL为4.1以上版本,默认编码为utf8;
3)pypMyAdmin中,语言设置为Chinese simplified (zh-utf-8),MySQL连接校对设置为utf8_general_ci;
2、症状描述:
1)安装正常,而且站点使用正常,包括中文;
2)在phpMyAdmin中,所有中文都是乱码!
3、参见帖子:数据库的乱码问题!!

问题分析
从MySQL的三个控制层来说,MySQL字符集(utf8)、MySQL连接校对(utf8_general_ci)以及站点编码(gb2312)没有任何问题,因为MySQL4.1以上版本支持这样混合的字符编码。
产生问题的真正原因是,在保存数据的时候,MySQL并不清楚网站提交的字符编码是gb2312,为此MySQL保存时就不知道用什么编码来保存数据,因此产生了乱码!

乱码解决办法
根据以上分析,只要我们指定网站提交的字符编码,那么MySQL就可以明白无误的用相应编码保存数据!
总结设置步骤如下:

1、在MySQL中设置默认编码为utf8。之后你在phpMyAdmin中就会看到不可修改项“MySQL 字符集: UTF-8 Unicode (utf8)”
2、在phpMyAdmin中,语言设置为Chinese simplified (zh-utf-8)
3、在phpMyAdmin中,MySQL连接校对设置为utf8_general_ci
4、在phpMyAdmin中,新增数据库和数据表的时候,整理项设置为utf8_general_ci

!!前面这四个步骤跟原来相比没有变化,关键是这下面一步的设置!!

5、根据XOOPS站点编码的不同,相应的修改文件“XOOPS/class/database/mysqldatabase.php”:
1)如果XOOPS的站点编码是utf8,那么在文件第248行添加:@mysql_query("SET NAMES ‘utf8’", $this->conn);
2)如果XOOPS的站点编码是gb2312,那么在文件第248行添加:@mysql_query("SET NAMES ‘gb2312’", $this->conn);

修改结果参照如下:
else {
//just execute the query
@mysql_query("SET NAMES ‘gb2312’", $this->conn);
$result = mysql_query($sql, $this->conn);
}

恭喜!设置完成!接下来照常安装XOOPS,就一切OK了!

同理,WordPress的乱码解决办法:

环境:WAMP5 1.6.0,其中MySQL为4.1以上版本,MySQL的默认编码UTF8;WordPress版本为2.0,编码UTF-8。
症状:正常安装,站点正常使用中文,可是进入phpMyAdmin,其中的中文都是乱码!
原因:同上,略。
解决:修改文件“WordPress/wp-includes/wp-db.php”,在第58行添加下边两行:

mysql_query("SET NAMES ‘UTF8’");
mysql_query("SET CHARACTER SET UTF8");

修改结果参照如下:
function wpdb($dbuser, $dbpassword, $dbname, $dbhost) {
$this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword);
if (!$this->dbh) {
$this->bail("……");
}
$this->select($dbname);
mysql_query("SET NAMES ‘UTF8’");
mysql_query("SET CHARACTER SET UTF8");
}

恭喜!设置完成!接下来照常安装WordPress,就一切OK了!

 
原贴:
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: