Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

想对各位插件作者说的话,为插件出现乱码困扰的人也看看吧

[复制链接]
sw08 发表于 2006-4-8 17:35:20 | 显示全部楼层 |阅读模式
如果没有猜错,应该大部分人都用了国外的免费空间。很多人抱怨国外的免费空间,虽然能支持中文(GBK)论坛安装,但是一安装插件,涉及到数据库写的时候,马上乱码就来了。许多人在抱怨插件作者怎么怎么的~

那个时候自己还不懂SQL命令,也在一直纳闷为什么论坛支持中文编码,凭什么插件不支持中文编码?随着自己对SQL命令的一点点的接触,我对照了官方的数据库升级和创建命令,同时对照了插件安装文件的数据库升级命令,才明白了一个原因,大部分插件作者都忽略了一个问题,接下来我会慢慢说明~

例如下面的插件,安装了,凡是有数据库读写的地方,肯定会出现乱码。
这是一个音乐播放器的升级文件中,执行SQL数据库命令的地方:
  1. DROP TABLE IF EXISTS cdb_p_music;;
  2. CREATE TABLE cdb_p_music (
  3.   id smallint(6) unsigned NOT NULL auto_increment,
  4.   displayorder tinyint(3) NOT NULL default '0',
  5.   name varchar(100) NOT NULL default '',
  6.   url varchar(100) NOT NULL default '',
  7.   PRIMARY KEY  (id)
  8. ) TYPE=MyISAM;;
  9. INSERT INTO `cdb_plugins` VALUES ('', 1, 1, '音乐列表', 'music', '音乐播放器音乐列表管理', 'p_music', 'music/', 'Designed by LFLY1573', 'a:1:{i:0;a:4:{s:4:"name";s:5:"music";s:4:"menu";s:12:"音乐列表管理";s:4:"type";s:1:"3";s:7:"adminid";i:1;}}');;
  10. EOT;
复制代码

这样在部分国外空间安装能不出现乱码?

其中你会找到) TYPE=MyISAM;;这一句吧,如果对照过官方文件,你会感觉少了什么吧。
看出来了吧,就是指定数据库编码的那一小句CHARSET=gbk。

把) TYPE=MyISAM 修改成) TYPE=MyISAM CHARSET=gbk;;就不会有乱码了(前提是你所用的DISCUZ!为GBK版本)
也就是把这个SQL命令修改成:
  1. DROP TABLE IF EXISTS cdb_p_music;;
  2. CREATE TABLE cdb_p_music (
  3.   id smallint(6) unsigned NOT NULL auto_increment,
  4.   displayorder tinyint(3) NOT NULL default '0',
  5.   name varchar(100) NOT NULL default '',
  6.   url varchar(100) NOT NULL default '',
  7.   PRIMARY KEY  (id)
  8. ) TYPE=MyISAM CHARSET=gbk;;
  9. INSERT INTO `cdb_plugins` VALUES ('', 1, 1, '音乐列表', 'music', '音乐播放器音乐列表管理', 'p_music', 'music/', 'Designed by LFLY1573', 'a:1:{i:0;a:4:{s:4:"name";s:5:"music";s:4:"menu";s:12:"音乐列表管理";s:4:"type";s:1:"3";s:7:"adminid";i:1;}}');;
  10. EOT;
复制代码


高手们应该明白了我的意思吧,可以直接看最后了,下面是我为新手解释下解决办法。

以后有谁安装插件出现乱码的,都这样修改,绝对没有乱码,同时不会对安装和使用有任何影响(前提你的论坛是GBK编码的):
一般找到插件的安装文件,如setup.php,install.php等等的~
1、找到:
  1. ) TYPE=MyISAM;;
复制代码


修改成:
  1. ) TYPE=MyISAM CHARSET=gbk;;
复制代码


2、如果找不到上面的,按照下面改。
找到 :
  1. PRIMARY KEY  (id)
  2. );
复制代码


替换成:
  1.   PRIMARY KEY  (id)
  2.   ) TYPE=MyISAM CHARSET=gbk;;
复制代码


这样一般的插件安装都不会出现乱码了,包你满意。所有测试均通过,可以放心地改。
应该还有个一劳永逸的方法,可惜那个SQL命令无效,先不说了。

但是一般多语言插件的作者都能考虑这个编码问题了~所以一般多语言插件不会有这个问题。

转入正题了,插件作者能否也加上CHARSET=gbk这一小段呢?如果说DZ还有很多语言版本的,里面的gbk是可以替换的,记得以前银行发布后,经常有人提问为什么查看记录的时候,中文ID会显示为乱码。
希望以后插件作者写插件的时候,能考虑下这个问题,尽量做到完美。每一种语言版本单独写个安装文件~

以上是我的比较片面的看法,希望插件作者能考虑下,写出更完美的插件;当然也希望对新手有帮助,尽量让编码问题成为一个历史吧~

——完——

[ 本帖最后由 sw08 于 2006-4-8 17:38 编辑 ]
M55 发表于 2006-4-8 18:53:53 | 显示全部楼层
晕,这么好的贴居然没人回~~~~~~~

靠,来这里的都是飞鸟级的是吧?????

人家好心提醒多少回个贴啦!
回复

使用道具 举报

M55 发表于 2006-4-8 18:56:44 | 显示全部楼层
这样的事情一般根本没人说(这是LZ好心)。别人告诉你们你们又不回贴,到时候又发贴问为什么????

问人家人家不理又要说到这里没人回答~~~~~~~

倒!
回复

使用道具 举报

泡哥 发表于 2006-4-8 18:57:32 | 显示全部楼层
呵呵 可以说 SQL4.0以下这句没用  这句可以省略   4.0以上也不是你这种写法 CHARACTER SET gbk COLLATE gbk_chinese_ci
回复

使用道具 举报

泡哥 发表于 2006-4-8 18:59:22 | 显示全部楼层
尽善尽美的服务请联系官方插件服务  爱好者不求完美只求自己好用   要搞懂为什么  请学习SQL语言   不是很难我两天就学了大概!
回复

使用道具 举报

 楼主| sw08 发表于 2006-4-8 19:11:42 | 显示全部楼层

回复 #4 泡哥 的帖子

谢谢批评,我的SQL是5.0的。没测试过低版本的~

语句那个应该问题不是很大,至少我测试多个插件成功过。
回复

使用道具 举报

sakurakawaii 发表于 2006-4-8 19:35:41 | 显示全部楼层

 

我先顶顶,我做网页出生的,sql只会皮毛,高考结束学吧,到时大家提点下!哈哈!楼主真的很细心!赞!
回复

使用道具 举报

魔面浪子 发表于 2006-4-8 20:42:14 | 显示全部楼层
说实话,我对你们说的一点也不懂,但是我知道这个东西很有用。我顶!
回复

使用道具 举报

红色公牛 发表于 2006-4-9 01:05:52 | 显示全部楼层
这个当然要顶。的确用处很大。对新手也很大的帮助。
回复

使用道具 举报

流传动 发表于 2006-4-24 11:00:16 | 显示全部楼层
学习中~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-9-28 01:26 , Processed in 0.239741 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表