冰古blog » wordpress » 2005 » 12 » 11 » wordpress导入后出现乱码之解决

wordpress导入后出现乱码之解决

昨天下了wamp5,准备再好好学学PHP和玩一下wordpress。
没想到一来就弄个麻烦的~从空间上备份的数据,导入到本地数据库后,竟然是一堆乱码(形如:????),自己是搞鼓了一整天(试了几乎所以相关的utf8编码都是不行)也是没搞定。
自己搞不定就找人问吧。来到海豚在google论坛上建的论坛上发言,下午海豚告诉我在苛世录上可找到解决办法,跟去→桑林志Windix’s Weblog阿修的部落格
原因是:

从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过我在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。我读了一下新的MySQL在线手册中第十章”Character Set Support“后终于找到了解决方法并测试通过。

MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:

SET NAMES 'utf8';

解决办法是:
一、导入数据时,新建的数据库collation (校勘/整理)项选择为utf8_general_ci;
二、修改wp-includes/wp-db.php为

$this->dbh = @mysql_connect($dbhost,$dbuser,$dbpassword);
//加上下面這行
$this->query("SET NAMES 'utf8' ");

至此,问题解决。

3 Responses to “wordpress导入后出现乱码之解决”

  1. […] 从旧主机搬到新主机最烦人的就是乱码问题。这也是个由来已久的问题了。 从wordpress 2.2开始,wordpress提供DB_CHARSET和DB_COLLATE这两个参数以便我们更好地解决这个问题。但似乎这些并不够,仍旧会产生这样那样的问题,如Warning: Invalid argument supplied for foreach() in D:xampphtdocswordpresswp-includesclasses.php on line 88。最根本的解决应该还是把数据库里的数据由latin1_swedish_ci格式转换成utf8_general_ci格式。 wordpress官方的论坛就像wordpress那样,很有人气。你遇到的问题,很可能里面已经有人讨论过并已经解决了。乱码问题这个很热门的问题,当然也是完美地解决了地。 以下方法涉及数据库修改,请在备份数据库后操作! 解决的方法是这样的: 1. 下载g30rg3_x提供的这个plugin; 2. 确保你的wordpress是2.2.x或2.1.x,因为这个plugin只支持这两个系列的版本; 3. 上传到plugins文件夹并激活; 4. 到’UTF-8 Database Converter’菜单中按照提示进行剩余操作即可。 […]

  2. […] donews这些日子老抽筋,没有办法从那里逃出来,只能回到根据地来。此处停止更新。 通过这次转移使我对一些WordPress的BSP网站有些了解, (1)donews提供了import,但没有显式提供export,根据网友shura的《my.donews 搬家到wordpress方案》一文才成功下载了rss2.0的xml文件。 (2)linux-fans.com提供的wordpress mu版,提供import但却狠心地屏蔽的export,无奈。 (3)blogsome更加干脆,import和export全阉了,汗。 基于以上原因只能自己架设WP2.1了。结果导入数据的时候又有问题,如果MYSQL是4.0版本时,一切Ok。但MYSQL是4.1时,老是只能导入部分数据。后来又是网友冰古的《wordpress导入后出现乱码之解决》和shura的一句话: //加上下面这行 $this->query(“SET NAMES ‘utf8′” ); 救了我。 […]

  3. […] wordpress导入后出现乱码之解决 […]

Leave a Reply