Wordpress数据库中文补丁

2007年11月23日 星期五 标签: ,

[本篇只适用于使用 Wordpress 建立博客的朋友]

无奈WP这个bug实在太大了,以至于几乎所有比较复杂一些的英文插件,都根本无法在中文平台上使用,所以只好用利用整篇日志,与大家一起分享。

如果你从未使用 Wordpress , 本篇的内容你会看不明白,既然如此,不如省点时间,迅速跳过。

如果您使用 Wordpress 创建了中文博客,以下内容必定与你息息相关。

探索

使用Wordpress建立博客,免不了都会使用各种插件(plugin)。其中各种中文版本的插件无疑是大家的最爱。但因为数量较少,更新缓慢等原因,很多时候,为了最求理想效果,我们都不得不使用英文插件。

自从大家陆续升级到2.3版本以后,大量的2.2、2.1、1.x版本的中文插件更是再也无法使用。这用情况下,使用兼容2.3版本的英文插件,便逐渐成了主流。

发现

许多时候,我们往英文插件输入的内容,在保存后,会发现中文字符都变成了"?"号或者是其它乱码。

通常的做法是,我们会把这个插件扔掉,因为它不支持中文字符。但不支持中文往往不是插件的错,而且都是可以通过一些方法解决的,本文就是要提供解决这种问题的方法。

经过一些测试,发现运行一次这个插件以后,再安装其它插件,无论基于任何语言,都会立即对中文保存支持完好。

插件地址在这里

使用方法:

  1. 解压缩下载的文件到Wordpress所在的/wp-content/plugins/目录下;
  2. 在Wordpress后台控制面板的插件菜单中启用"set Database to UTF-8"这个插件;
  3. 搞定。

注意事项:

  • 插件不会对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”,以此解决以上所有问题。

感谢

如果你升级、完善了这个插件,我会把你写在这里,为大家升级提供帮助,并感谢你。

Rand Posts:

对《Wordpress数据库中文补丁》有 21 条评论

  1. oxygen 说:

    汗,我的评论被当成了垃圾评论,因为中间有英文?

  2. 漫步 说:

    晕,暂时没碰到不支持中文的所谓的英文插件..

  3. 过门 说:

    to oxygen : 都怪yo2,他的spam机制误判也太严重了。
    to 漫步 : 也许是因为大家都很少碰到,所以才从来没有发现。但是几乎所有需要"创建表"的英文插件都有这个问题。

  4. sofish 说:

    一般都是自己设置的...这样的方法会不会这前自己改编码的变成"?"...

  5. 过门 说:

    to sofish : 其实我也考虑了这个问题,所以插件并没有修改现存表的编码设定,因此自己改编码的变成"?"的情况是不会出现的。

  6. kaku 说:

    很少使用中文插件,插件装的多了会让网页加载的很慢,一些必须的就行了。关于这个database备份的,貌似还没有遇到什么问题,倒是那个sitmap的总是兼容性出现问题。

  7. 秦爱 说:

    不用WP,但相信你这篇文章对很多人都非常有用的。直觉。

  8. 漫步 说:

    如果方便的话,请你参与我组织的博客串联活动怎么样,谢谢。详情见
    http://roamlog.cn/archives/5-questions-about-you.html

  9. 过门 说:

    to kaku : 插件装的多了会让网页加载的很慢,确实有这个问题。
    to 秦爱 : 谢谢
    to 漫步 : 参加了 http://www.gomain.net/5-questions-about-you/

  10. 风暴轻狂 说:

    过门兄,现在安装wp,数据库都是设置成utf-8编码的了吧?

    我几乎没有见到因为中文而不能使用的插件。

    插件少装就好,或者自己将插件整合优化一下,减少wp的预载时间

  11. housne 说:

    一直坚持用英文版的wp 哇卡卡

  12. 过门 说:

    to 狂兄: 问题就出在了这里,wp在数据库中生成的表是UTF-8,但插件生成的表却不是。至于整合优化,我也支持少装插件。

    to housne: 汗一个。

  13. moon 说:

    在撰写文章的时候留意一下 下面有个 引用trackback的功能,添加上需要TB的地址 就可以了,只是有点慢,一般 20分钟后在别人的博客上可以看到效果 呵呵·

  14. 大猫 说:

    求不支持英文的中文插件...

  15. 摩摩诘 说:

    专业!!赞一个,其实我看不懂,哈哈

  16. fiorano 说:

    收藏先,准备自己买空间弄了,这说不定用得到,有问题再来请教你啊!

  17. 未知的味觉 说:

    我没有发现这个问题啊!!

  18. 过门 说:

    to moon : 谢谢分享!
    to 大猫 : 厉害!
    to 摩摩诘、fiorano : 感谢支持。
    to 未知的味觉 : 只有一些需要创建数据库的大插件才会出问题,而一般这类插件用的人并不多。

  19. 果子 说:

    我以前用function写了一个widget,可以按权重排列友情链接,中文就显示成了???
    不过现在还好了,所有的插件都用英文的了

  20. arthur 说:

    现在的2.6版本好像米了这个bug

  21. ddkk3000 说:

    怎么这么久都不更新了?

发表一条评论