[原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题 [技术论坛 - 使用问答]

正在浏览:   1 名游客


 到底部   前一个主题   下一个主题  [无发表权] 请登录或者注册



[原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
Support Team
注册日期:
2005/10/29 13:32
来自 北京
所属群组:
网站管理员
注册会员
帖子: 471
等级: 20; EXP: 9
HP : 190 / 477
MP : 157 / 794
离线
完美解决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了!

1/3 12:34:33
应用扩展 工具箱


回复: [原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
Support Team
注册日期:
2004/7/15 17:43
所属群组:
注册会员
技术文档组
Dev+Hack
帖子: 244
等级: 14; EXP: 60
HP : 0 / 340
MP : 81 / 1845
离线
先顶一个,回头试下~

1/3 14:24:40
应用扩展 工具箱


回复: [原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
网站管理员
注册日期:
2005/6/1 11:00
来自 北京海淀
所属群组:
网站管理员
注册会员
ComSupp
帖子: 202
等级: 13; EXP: 25
HP : 61 / 306
MP : 67 / 877
离线
好东东,收藏了。

1/3 16:14:05
应用扩展 工具箱


回复: [原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
Support Team
注册日期:
2005/10/29 13:32
来自 北京
所属群组:
网站管理员
注册会员
帖子: 471
等级: 20; EXP: 9
HP : 190 / 477
MP : 157 / 794
离线
补充:文中提到的WAMP5,强烈推荐新手使用,网址为:http://www.wampserver.com/en/index.php

如果各位访问不了的话,请使用代理。(今日测试可用代理一个 61.32.153.248:50050)

WAMP5安装之后有一个重要的设置,就是修改MySQL的默认编码为utf8!

菜单:config files/my.ini
修改:default-character-set=utf8

1/3 16:24:20
_________________
学而时习之,不亦说乎
有朋自远方来,不亦乐乎
人不知而不愠,不亦君子乎
[推荐] Article 0.82评测报告 (20060216)
应用扩展 工具箱


回复: [原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
Support Team
注册日期:
2005/10/29 13:32
来自 北京
所属群组:
网站管理员
注册会员
帖子: 471
等级: 20; EXP: 9
HP : 190 / 477
MP : 157 / 794
离线
如果你使用的XOOPS是2.0.13.2版本,那么修改的位置在239-240行左右,参考修改结果如下:

@mysql_query("SET NAMES 'utf8'", $this->conn);
$result =& mysql_query($sql, $this->conn);

4/7 13:41:35
_________________
学而时习之,不亦说乎
有朋自远方来,不亦乐乎
人不知而不愠,不亦君子乎
[推荐] Article 0.82评测报告 (20060216)
应用扩展 工具箱


回复: [原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
新进会员
注册日期:
2005/10/11 13:09
所属群组:
注册会员
帖子: 17
等级: 2; EXP: 86
HP : 0 / 46
MP : 5 / 84
离线
感谢楼主的分享.还有一个问题,就是日版的xoops cube和xoops 2.0.13.2版本是不支持mysql 5.0的,不知道使用了您的方法修改后,
是否就可以在mysql 5.0上装上xoops cube和 2.0.13.2呢?

4/7 15:48:16
应用扩展 工具箱



 回顶部   前一个主题   下一个主题

 [无发表权] 请登录或者注册


可以查看帖子.
不可发帖.
不可回复.
不可编辑自己的帖子.
不可删除自己的帖子.
不可发起投票调查.
不可在投票调查中投票.
不可上传附件.
不可不经审核直接发帖.

[高级搜索]