Wordpress数据库中文补丁
[本篇只适用于使用 Wordpress 建立博客的朋友]
无奈WP这个bug实在太大了,以至于几乎所有比较复杂一些的英文插件,都根本无法在中文平台上使用,所以只好用利用整篇日志,与大家一起分享。
如果你从未使用 Wordpress , 本篇的内容你会看不明白,既然如此,不如省点时间,迅速跳过。
如果您使用 Wordpress 创建了中文博客,以下内容必定与你息息相关。
探索
使用Wordpress建立博客,免不了都会使用各种插件(plugin)。其中各种中文版本的插件无疑是大家的最爱。但因为数量较少,更新缓慢等原因,很多时候,为了最求理想效果,我们都不得不使用英文插件。
自从大家陆续升级到2.3版本以后,大量的2.2、2.1、1.x版本的中文插件更是再也无法使用。这用情况下,使用兼容2.3版本的英文插件,便逐渐成了主流。
发现
许多时候,我们往英文插件输入的内容,在保存后,会发现中文字符都变成了"?"号或者是其它乱码。
通常的做法是,我们会把这个插件扔掉,因为它不支持中文字符。但不支持中文往往不是插件的错,而且都是可以通过一些方法解决的,本文就是要提供解决这种问题的方法。
经过一些测试,发现运行一次这个插件以后,再安装其它插件,无论基于任何语言,都会立即对中文保存支持完好。
使用方法:
- 解压缩下载的文件到Wordpress所在的/wp-content/plugins/目录下;
- 在Wordpress后台控制面板的插件菜单中启用"set Database to UTF-8"这个插件;
- 搞定。
注意事项:
- 插件不会对Wordpress台前幕后的设置造成任何其它影响,也不会生成任何控制面板,所以绝对绿色;
- 插件仅对新安装的插件有帮助,对已经安装或是曾经安装的插件没有任何影响。如果你之前已经安装了某些插件,而这些插件在保存时出现了乱码,在启用"set Database to UTF-8"后它还是会继续乱码,这个插件不会去主动修改已安装插件的乱码问题;
- 对于上面的情况,如果你真的很喜欢那款出现乱码的插件,其实还有一个办法: 先把那款插件禁用,再把插件生成的数据库删除掉,在保证"set Database to UTF-8"已经启用的情况下,重新启用插件,问题通常就能解决。
- 为什么"set Database to UTF-8"不去修改或是帮忙删除有问题的数据库,这样用户岂不更方便一些?拜托,这是原则问题,我才不要一不小心被人告成了流氓软件。如果你有这方面的需要,请自己修改一下,一般几个迭代就可解决。
浅淡原理
英文插件不支持中文,大部分是因为编写插件的老外偷懒造成的。他们经常在插件中漏了几行代码,而这几行代码往往含有支撑中文环境的必要内容。老外也许没有中文测试环境,所以发现不了这么严重的问题,而只要我们装上"set Database to UTF-8",就能填补这个漏洞。
编写原理
老外的偷懒,经常发生在数据库的创建环节上。根据Wordpress的设计思路,任何一个数据表在创建时都应该遵循以下格式:
$charset_collate = '';
if ( version_compare(mysql_get_server_info(), '4.1.0', '>=') ) {
if ( ! empty($wpdb->charset) )
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
if ( ! empty($wpdb->collate) )
$charset_collate .= " COLLATE $wpdb->collate";
}
$create_table_sql = "CREATE TABLE " . 数据表内容. $charset_collate ;
而他们往往就是没了最后 $charset_collate 这一段,所造成的直接后果是,表使用了数据库的默认字符编码创建。Wordpress默认的字符编码是“UTF-8”,而MySQL的默认字符却是"Latin1"。就是这里,造成了中文字符保存的乱码及不支持。
这个插件只有一条SQL命令,就是把当前数据库的默认编码改回 “UTF-8”,以此解决以上所有问题。
感谢
如果你升级、完善了这个插件,我会把你写在这里,为大家升级提供帮助,并感谢你。

汗,我的评论被当成了垃圾评论,因为中间有英文?
晕,暂时没碰到不支持中文的所谓的英文插件..
to oxygen : 都怪yo2,他的spam机制误判也太严重了。
to 漫步 : 也许是因为大家都很少碰到,所以才从来没有发现。但是几乎所有需要"创建表"的英文插件都有这个问题。
一般都是自己设置的...这样的方法会不会这前自己改编码的变成"?"...
to sofish : 其实我也考虑了这个问题,所以插件并没有修改现存表的编码设定,因此自己改编码的变成"?"的情况是不会出现的。
很少使用中文插件,插件装的多了会让网页加载的很慢,一些必须的就行了。关于这个database备份的,貌似还没有遇到什么问题,倒是那个sitmap的总是兼容性出现问题。
不用WP,但相信你这篇文章对很多人都非常有用的。直觉。
如果方便的话,请你参与我组织的博客串联活动怎么样,谢谢。详情见
http://roamlog.cn/archives/5-questions-about-you.html
to kaku : 插件装的多了会让网页加载的很慢,确实有这个问题。
to 秦爱 : 谢谢
to 漫步 : 参加了 http://www.gomain.net/5-questions-about-you/
过门兄,现在安装wp,数据库都是设置成utf-8编码的了吧?
我几乎没有见到因为中文而不能使用的插件。
插件少装就好,或者自己将插件整合优化一下,减少wp的预载时间
一直坚持用英文版的wp 哇卡卡
to 狂兄: 问题就出在了这里,wp在数据库中生成的表是UTF-8,但插件生成的表却不是。至于整合优化,我也支持少装插件。
to housne: 汗一个。
在撰写文章的时候留意一下 下面有个 引用trackback的功能,添加上需要TB的地址 就可以了,只是有点慢,一般 20分钟后在别人的博客上可以看到效果 呵呵·
求不支持英文的中文插件...
专业!!赞一个,其实我看不懂,哈哈
收藏先,准备自己买空间弄了,这说不定用得到,有问题再来请教你啊!
我没有发现这个问题啊!!
to moon : 谢谢分享!
to 大猫 : 厉害!
to 摩摩诘、fiorano : 感谢支持。
to 未知的味觉 : 只有一些需要创建数据库的大插件才会出问题,而一般这类插件用的人并不多。
我以前用function写了一个widget,可以按权重排列友情链接,中文就显示成了???
不过现在还好了,所有的插件都用英文的了
现在的2.6版本好像米了这个bug
怎么这么久都不更新了?