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

正在浏览:   1 名游客






[原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
网站管理员
注册日期:
2005/10/29 13:32
来自 北京
所属群组:
网站管理员
注册会员
ComSupp
推广组
帖子: 1837 | 精华: 12
等级: 35; EXP: 77
HP: 347 / 869
MP: 612 / 5167
离线
完美解决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了!

2006/1/3 12:34
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


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

2006/1/3 14:24
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: [原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
项目管理员
注册日期:
2005/6/1 11:00
来自 北京海淀
所属群组:
注册会员
ComSupp
帖子: 234
等级: 14; EXP: 29
HP: 0 / 332
MP: 78 / 2375
离线
好东东,收藏了。

2006/1/3 16:14
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: [原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
网站管理员
注册日期:
2005/10/29 13:32
来自 北京
所属群组:
网站管理员
注册会员
ComSupp
推广组
帖子: 1837 | 精华: 12
等级: 35; EXP: 77
HP: 347 / 869
MP: 612 / 5167
离线
补充:文中提到的WAMP5,强烈推荐新手使用,网址为:http://www.wampserver.com/en/index.php

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

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

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

2006/1/3 16:24
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: [原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
网站管理员
注册日期:
2005/10/29 13:32
来自 北京
所属群组:
网站管理员
注册会员
ComSupp
推广组
帖子: 1837 | 精华: 12
等级: 35; EXP: 77
HP: 347 / 869
MP: 612 / 5167
离线
如果你使用的XOOPS是2.0.13.2版本,那么修改的位置在239-240行左右,参考修改结果如下:

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

2006/4/7 13:41
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


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

2006/4/7 15:48
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: [原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
新进会员
注册日期:
2006/7/9 13:24
所属群组:
注册会员
帖子: 3
等级: 1; EXP: 10
HP: 0 / 2
MP: 1 / 10
离线
请问,最新的2.0.14版本.应该修改哪个语句?
我在同一个文件里找不到相关语句
谢谢指教

2006/7/9 19:43
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: [原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
新进会员
注册日期:
2006/7/9 13:24
所属群组:
注册会员
帖子: 3
等级: 1; EXP: 10
HP: 0 / 2
MP: 1 / 10
离线
2.0.14相关语句如下


function queryF($sql, $limit=0, $start=0)
{
if ( !empty($limit) ) {
if (empty($start)) {
$start = 0;
}
$sql = $sql. ' LIMIT '.(int)$start.', '.(int)$limit;
}
$result = mysql_query($sql, $this->conn);
if ( $result ) {


2006/7/9 19:47
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: [原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
新进会员
注册日期:
2006/7/9 13:24
所属群组:
注册会员
帖子: 3
等级: 1; EXP: 10
HP: 0 / 2
MP: 1 / 10
离线
明白了

$result = mysql_query($sql, $this->conn);

的上面,添加
@mysql_query("SET NAMES 'utf8'", $this->conn);

2006/7/9 19:54
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: [原创]完美解决XOOPS及WordPress在MySQL4.1之后版本中的乱码问题
中级会员
注册日期:
4/18 12:59
来自 厦门
所属群组:
注册会员
帖子: 56
等级: 6; EXP: 34
HP: 0 / 133
MP: 18 / 221
离线
用Xoops模式(多用户,每个用户有自己独立的页面)时 新写的文章会乱码 包括分类也会乱码。。。

如果用wordpress(单用户) 调到首页的内容会乱码,在 wordpress下是不会的。如:http://westdream.org/modules/wordpress/

我的问题 还没解决

5/5 17:52
工具箱 短消息 Email PDF 书签 打印 举报 回顶部





不可查看帖子。
不可发帖。
不可回复。
不可编辑自己的帖子。
不可删除自己的帖子。
不可发起投票调查。
不可在投票调查中投票。
不可上传附件。
不可不经审核直接发帖。
不可使用主题类别。
不可以使用HTML语法。
不可以使用签名档。

[高级搜索]