discuz论坛帖子出现html乱码的解决思路

1

分类 : 网络日志 | 发表时间 10-03-2009

现在论坛社区这种模式,明显没有以前火爆了,这一年多以来特别明显,既没有软件破解的百家争鸣,也没有很成功的社区盈利模式可以参考,虽然也时而有什么门户网站应用哪个论坛程序,上下资讯榜,但在整个国内整个互联网来看,是明显的没落,明显的萧条了;论坛如此,博客这个模式,何尝不是如此呢?

从动网论坛的asp以来,再到后来的phpwind,以及现在的discuz,Linker玩过的国内外论坛,可谓不少,没有上百也有几十家了,因此,在使用期间,也经常转换论坛数据。在转换论坛过程中,总是会出现,出现帖子内容出现大量html乱码的问题,这有可能是不同论坛对不同的ubb代码解释不一致,也有可能是,是否启用html代码解释功能有关,今天帮朋友给把这问题给解决了一把。

事情起源于使用火车头采集器,采集一些行业内容到discuz7论坛上去;有关采集的评论,Linker不想说太多,一件武器有好的方面,也有坏的倾向,关键在于使用者,Linker一直偏好于摸索使用各方面软件,对于采集类软件,火车头是接触最早最多的,但自从火车头发布3.x版本以后,火车头采集器的免费版本功能就限制很多了,因此关注也少了许多。

朋友的站是一个产品行业站,带了一个discuz论坛,增加一些网站的收录,给主域名增加一些浏览量,以使排名好看些,这问题应该不大。他选择了一个站点,说不要太多,挑一挑,采个二百多条就行了,采集后他慢慢整理修改。规则、发布模块的,都好搞,很快就制定好了,但在测试发布时,有一个小问题,如果发布时使用UBB形式,帖子内容、图片都好控制版面,并且引用下载资料的url地址也显示链接正常,但有关ftp的下载地址就不行了,不仅识别不了,还被转换成了ubb代码,诸如:linwan.net.cn.rar,默认情况下,discuz论坛的ubb是不解释ftp的链接的,以前见到有高人修改过,但现在怎么找也找不到了,这就麻烦了。如果是人工,禁用掉discuz代码,启用html,发布正常;如果在采集发布时,使用html形式,发布后全是包含了html代码的帖子版面,惨不忍睹。

不说中间的尝试过程了,更有甚者,Linker在discuz后台连屏蔽替换功能都用上了,也没解决掉,不过最后还是在discuz论坛上,找到了一个稍费周折点的办法。

在discuz的cdb_posts表中,有一个字段“htmlon”是控制着,该贴是否启用html识别功能;首先在火车头采集器中,还是用html形式发布,采集发布完以后,用phpmyadmin执行如下语句,当然,如果discuz管理后台没有关闭可执行sql语句功能,在那个数据库升级页面执行也可以。

UPDATE `cdb_posts` SET `htmlon` = ’1′ //后面where是条件,如果全部都启用,就不用带。

WHERE `cdb_posts`.`fid` =3 //这是指限制执行id为3的版块

and `cdb_posts`.`tid` > 105 //这是限制执行帖子id大于105

and `cdb_posts`.`author` =’admin’// 这是限制执行作者为admin的帖子

and `cdb_posts`.`useip`=’123.10.53.93′//这是限制执行发布者ip

主要还是让htmlon值为1,这样在发布以后,虽然是乱码,但经过这个字段的值修改,帖子就启用了html代码解释功能,帖子版面就正常了,那个ftp链接,源站点是什么样子,这里也显示什么样子。当然,版块要启用html功能。

如果是手工发布,想把启用html设置为勾选状态,可以直接修改模板post.htm,把html那里加如checked=“checked”就可以了,同样,论坛后台要开启该版块支持html。

过程就是折腾,折腾并辛苦快乐着。

windows7中文语言包环境下安装winrar等软件乱码的解决方法

0

分类 : 网络日志 | 发表时间 12-01-2009

windows7 beta 7000在cnbeta上公布下载地址的同时,linker也在公司的10M光纤上用迅雷开始了下载,所以说微软的windows7下载服务器被拖垮,实在也有linker一份“罪过”,安装汉化之后在安装最基本的winrar软件时,发现安装界面乱码,安装后右键菜单乱码,下载中文命名的软件时,也是乱码。

windows7安装过程,稍稍叙述一下。

下载windows7 beta 7000安装镜像,下载微软提供的中文语言包,我没有使用U盘启动winPE这种方法安装,而是用UltraISO工具做了虚拟光驱,然后打开光驱里面的“Setup”安装,安装过程很简单,可以说比安装win98还要简单,中间会有两次重启,之后要求建立账号,此账号也是超级管理员账号,但是没有administrator那么“猖狂无忌”,推荐使用自建立账号,相对还是比较安装,现在windows7在UAC方面已经有很大进步了。

windows7安装之后,解压语言包(稍后说安装、使用winrar的乱码问题),在“控制面板”的语言和区域选项里面,选择“change display language”,打开“install/uninstall language”,提示是在线安装还是浏览目录安装,选择浏览目录,指引至你的中文语言包位置,选择“pl文件”,选择简体语言,等待安装完成,重启后,中文语言界面已经出来了;这个简体语言包还是相当全面的,只有少数部分还是英文,但对于windows7的测试阶段来说,已经让人很满意了。

至于windows7 beta 7000的激活,网上有很多公开的激活序列号,并且微软已经放开了为250万人提供免费激活码的限制,改为在“1月24号”以前下载的用户都可以申请到激活码,打开http://www.microsoft.com/windows/windows-7/beta-download.aspx,需要使用一个Windows Live ID账号登陆,就可以拿到属于你自己的windows7激活码了。

在安装winrar时,安装界面出现了很多???问号和乱码,下载软件的名字也是乱码,并且安装snagit和迅雷等软件时,界面也是乱码,非常麻烦,经过一番摸索,终于让winrar等软件界面显示正常了;

打开“控制面板”,打开“区域和语言选项”,按以下图示照做,然后会有提示重启,重启后安装winrar界面和右键菜单都正常了。

windows7中文语言包环境下安装winrar等软件乱码的解决方法windows7中文语言包环境下安装winrar等软件乱码的解决方法

windows7中文语言包环境下安装winrar等软件乱码的解决方法windows7中文语言包环境下安装winrar等软件乱码的解决方法

在最后一步修改“非Unicode程序中所用的当前语言为“中文(简体,中国)”后,系统会提示重启,重启中安装winrar等常用软件,界面已经显示正常;网上包括网景论坛有很多方法,比如先设置为经典界面再换回你要使用的主题,或修改默认系统主题然后再修改为你要选择的主题,或者先修改系统字体为系统默认字体再修改为你自己要用的字体比如雅黑等,这些方法感觉不是太有道理,因此,还是上面图示的方法比较实用,照做就OK了,当然,以后window7正式简体中文版本不会出现这样的乱码问题。

windows7的截图工具效果不错,但应用便捷性不佳,比如不支持快捷键,不支持改变图片大小,生成的gif图片惨不忍睹,这些方面可以原谅和理解,不然,诸如snagit等抓图软件怎么生存哪!

有朋友在问,windows7的显示桌面工具哪去了?还在任务栏,在任务栏的最右最右边,有一个竖条,点击就是“显示桌面”的功能啦!

修改feeds输出编码解决加载wordpress汉化语言包乱码问题

2

分类 : 网络日志 | 发表时间 05-01-2009

今天也是闲来找事,被同事捉到让我把他放在英国的一个英文网站做下升级,没办法,意志不坚定,一番“威逼利诱”之下,不得不“屈服”,操刀上马开始升级征程。

程序是wordpress的,版本没注意是哪个版本,但wordpress好就好在不管逮住哪个版本,只要覆盖升级了以后,升级向导程序都能给升级上去,起码我是这样认为的。

安全起见,把站从英国先下载下来;网站文件比较少,打包就一会就下载下来了,数据库比较大,将近三万篇文章,如果用wp-db_backup来备,恐怕会比较慢并且有可能超时。照例还用“帝国备份王”,几百K,上传下去,配置好数据库连接,备份,十几秒种备份完毕,下载。

在本地搭建Amp环境,用的是“APMServ5.2.6”,用phpmyadmin新建一个数据库后,用ebak恢复数据库,修改wp-config.php的数据库连接参数,前台正常,后台登陆正常;然后到wordpress下载官方的2.7英文版本,覆盖,登陆后台,根据提示,升级,升级时提示有关“google-sitemap-generator.2.7.1”插件错误,删除此插件,顺利登陆后台。奇怪,这个插件怎么会报错呢?

其他设置就不多说了,以前讲过,英文水平不是太熟练,因此后台英文很多设置看着比较费劲,于是想到暂时找一个wordpress的中文语言包,到http://code.google.com/p/wordpresschina/downloads/list下载中文语言包,放在wp-content目录的languages目录里面。在根目录的wp-config.php文件中,修改“define (‘WPLANG’, ”);”为“define (‘WPLANG’, ‘zh_CN’);”,注意大小写。

但在刷新后台时,发现后台出现乱码现象,不过这个乱码现象可以明显区分出是界面乱码,不是数据库输出乱码。在ie调试下,通过右键选择“utf-8”编码浏览正常,依此看来,是网页宣告编码有问题。右键查看后台网页源代码,发现:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

怎么看怎么找不到utf-8的声明,只是想不到这个编码在哪里修改,难道需要修改head.php文件?不会吧,wordpress是出了名的标准,应该不会让去修改源代码。到阿江的群里面问下,果然有人确定“后台有修改的地方”,找了找,只发现有“read阅读”设置那里有一个设置feeds输出编码的地方,这个地方填写的就是“iso-8859-1”,在群里面也说了下,马上就有群友确定“pages编码和feeds输出编码是一样的”,也就是这个地方的设置也决定着pages的输出设置,马上修改为“utf-8”,这也是wordpress后台推荐的设置,刷新后台,中文界面一切ok!网页源代码中已经更改:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

注:iso-8859-1被称为是西欧语言,以上错误现象,比如GB2312中有一个汉字“李”,其编码为“C0EE”,欲转化为ISO8859-1编码。步骤为:先把“李”字转化为Unicode,得到“674E”,再把“674E”转化为ISO8859-1字符。当然,这个映射不会成功,因为ISO8859-1中根本就没有与“674E”对应的字符,所以就造成了乱码现象。

至于wordpress的数据库转换、搬家乱码问题,除了用帝国备份王来避免以外,用以下方法也可以完善解决:

修改用WP-DB Backup导出的文件,把DEFAULT CHARSET=latin1替换为DEFAULT CHARSET=utf8,重新导入,一切OK,Collation也为utf8_general_ci,然后再修改wp-includes/wp-db.php

$this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword);
//加入以下一行
$this->query(”SET NAMES ‘utf8′”);

一切OK!

从此以后,wordpress前台、后台、模板界面、数据库输出,一切乱码问题皆无忧! 

discuz论坛乱码的又一例解决方法

0

分类 : 网络日志 | 发表时间 12-04-2008

 discuz论坛系统占领中文论坛的大半壁江山,无疑,它的功能和发展,是非常优秀的,当然,不能称最,因为,搜索林网博客就知道,林网博客对他颇有微词。以前也曾经讨论过有关discuz论坛乱码的话题,比如:[终于找到了解决discuz乱码的方法了] [phpwind转换discuz后前台乱码的一点说明] [Discuz!4.0及以上版本由UTF8转GBK的详细教程【告别乱码,拥抱插件】] 等,今天暂且剖开以前的说法,另外再说一些小窍门,算得上“歪门邪道”的解决方法吧。

在建立数据库的时候,默认建立好的空数据库目录下都有一个db.opt的文件,用记事本打开,一般是两行下列代码:

default-character-set=latin1
default-collation=latin1_swedish_ci

我当时处理这个论坛数据时,是没有进行安装论坛那一步的,只是下载一个新的discuz6论坛程序,然后新建一个数据库(此时用的是mysql4.0版本),然后把以前的那个数据库直接就全部拷贝进去了,配置好数据库连接(config.inc.php),就开始运行。这时,反映论坛数据乱码,从表面现象可以看出来,这乱码是数据库输出的数据。打开db.opt文件,然后把default-character-set=latin1修改了一下,default-character-set=gbk,然后刷新论坛,发现论坛输出的数据库数据已经正常。

由于要上传到正式服务器上时,现在的正式服务器mysql服务很多都是mysql5.0以上的版本了,因此,我把这个数据库直接拷贝至5.0的数据库data目录,运行论坛,发现还是乱码,这时,不管是把db.opt文件中的default-character-set改为gbk还是latin1,都是乱码;还是有办法解决的:

修改config.inc.php文件:
$dbcharset = ”;   // default database character set, ‘gbk’, ‘big5′, ‘utf8′, ‘latin1′ and blank are available
(一般的MySQL数据库默认编码是latin1,现在MySQL由4.0.27-standard升级到了5.0.24)
我把其中的
$dbcharset = ”;
改成
$dbcharset = ‘latin1′;

然后再次刷新论坛,论坛输出数据已经正常,虽然title和首页底部的会员等级有些乱码,这不影响,这是缓存引起,在管理后台更新缓存即可。

简单说了这个小方面,综合解决,参考林网博客开篇的几篇文章,一般都能解决论坛乱码问题。事实上,数据库高手解决起来这些,不算什么,声明,我不是,我只是个小玩家,摸索倒腾了一些小窍门,自己窃喜而已。另:测试时用的工具是:APMServer 5.2.0。非常好用,推荐。也有不少有关LightTPD-1.4.16-Win32的组合,因为比较少用,这次就没再费神。

再述Warning: Invalid argument supplied for foreach() in 完善解决方案

1

分类 : 网络日志 | 发表时间 05-02-2007

一位朋友的dz5.0论坛前一天又出现了“Warning: Invalid argument supplied for foreach() in memcp.php在217行的错误,具体信息出现在前台登陆后,控制面板的最上方。

到dz论坛搜索相关主题时,出现了很多答案,有提供修改补丁的,我看日期,很早的了;补丁由于貌似不是官方出的,也没敢用,也就在慢慢的翻相关的官方人物的回复,后来看到,有位小官回复了一下,请设置论坛积分设置,灵机一动,觉得有可能,于是登陆论坛后台,基本设置,积分设置,有很多项,记得默认是有两项设置的,但朋友的论坛却一项也没有,随意设置了两项,威望、金钱;后面选项,打上勾,提交,清理一下缓存,然后到前台,刷新控制面板所在页面,问题解决。

感觉,dz的服务,确实不错;但也需要完善,因为在浏览过程中,还是有很多死贴,无人问津,在这个以服务竞争取胜的氛围里,这很重要。

今天处理的服务器上cdb_session问题

0

分类 : 网络日志 | 发表时间 04-02-2007

今天同事给我说,他一客户的dz论坛在发几个帖子之后,就出现了乱码,乱码的具体表现,现在已经无法详细描述,但大致原因似是说内存不够等;

登陆dz管理后台,看各个数据库中的表,发现cdb_session的问题,呈灰色不可选状态,到dz论坛查此问题,发现果然与此数据表有关,这个数据表一般记录用户登陆、在线等缓存数据,时间长了,需要清理一下,以减轻数据库的处理负担,这个表,经常清理,没有坏处,反而有莫大的好处。

利用dz论坛的repair.php,来检测dz论坛的数据库各表,没有发现问题,看来,数据库结构没事,应该是数据的问题了。

登陆phpmyadmin,选择清空数据,然后登陆到dz后台,清理缓存,此时,再到前台处理帖子,已经没有问题。

查dz论坛有些人员的回答办法是提升mysql数据库的引擎版本,我朋友的服务器上的版本是4.1.24的版本,应该算是比较稳定的版本,出现这问题,比较奇怪;唯一可能的是,这个论坛是通过备份的数据库还原的,这个表恰恰暂存的是其它版本的缓存数据,造成了一定的冲突。

此问题继续跟踪中!

 

有关Discuz!数据表含义

有很多人问到关于各个数据表的含义,我整理了一下,希望可以帮到大家
以下为Discuz!4.1.0的数据表含义
 

CODE:

cdb_access               用户权限表      
cdb_adminactions         管理动作表
cdb_admingroups          管理组数据表
cdb_adminnotes           管理员留言  
cdb_adminsessions        管理员后台在线记录
cdb_advertisements       广告资料表
cdb_announcements        论坛公告资料表
cdb_attachments          附件资料表
cdb_attachtypes          附件类型表
cdb_banned               被禁止的ip列表
cdb_bbcodes              bb代码资料表
cdb_blogcaches           博客缓存表
cdb_buddys               好友信息表
cdb_creditslog           积分交易记录表
cdb_crons                计划任务表
cdb_failedlogins         错误登录记录
cdb_favorites            个人收藏信息表
cdb_forumfields          板块扩展信息数据表
cdb_forumlinks           友情链接数据表
cdb_forums               版块资料表
cdb_medals               勋章资料表
cdb_memberfields         用户扩展资料表
cdb_members              用户基本资料表
cdb_moderators           版主信息数据表
cdb_modworks             版主工作记录表
cdb_onlinelist           在线列表定制
cdb_onlinetime           用户在线时间信息表
cdb_orders               订单数据表
cdb_paymentlog           支付记录
cdb_pluginhooks          插件钩子表
cdb_plugins              插件表
cdb_pluginvars           插件配置表
cdb_pms                  短信资料表
cdb_pmsearchindex         短消息搜索缓存表
cdb_polls                投票帖资料表
cdb_posts                帖子资料表
cdb_profilefields        用户栏目定制
cdb_promotions           论坛推广
cdb_ranks                头衔表
cdb_ratelog              帖子评分记录表
cdb_regips               注册ip记录表
cdb_relatedthreads       相关主题
cdb_rsscaches            RSS缓存
cdb_searchindex          搜索缓存
cdb_sessions             在线表
cdb_settings             论坛设置表
cdb_smilies              表情信息表
cdb_stats               统计数据表
cdb_statvars             统计变量表
cdb_styles               风格
cdb_stylevars            风格变量表
cdb_subscriptions        订阅信息表
cdb_templates            模板
cdb_threads              主题资料表
cdb_threadsmod           主题管理记录表
cdb_threadtypes          主题分类表         
cdb_usergroups           用户组数据表
cdb_validating           等待人工审核的会员记录
cdb_words                词语过滤表
        

mysql乱码问题又一例

0

分类 : 技术文摘 | 发表时间 09-11-2006

今天下午过搬迁服务器;转移数据被搞死掉了 由于数据是经过mysql低版本升级到高版本的;所有在搬迁的过程中出现很多问题。

因为开始建立数据库的时候用的默认字符集是gb2312 升级后的mysql 有点问题;最后将导出来的数据的setchar=gb2312 全部拿掉;

然后setchar 的文字集 就要看你的mysql my.cnf 启动的时候默认的字符集文件是用什么了;如果默认的是gb2312 没有办法 你将setchar去掉 你出来的字符还是gb2312

所以 你可以将setchar=gb2312 改成setchar=latin1 实在不行的话将my.cnf文件的默认启动字符集 去掉 从新启动mysql

摘自:http://www.suwenjian.com/read.php?9

MySql数据库中表的修复

1

分类 : 技术文摘 | 发表时间 19-08-2006

今天早上发现因为磁盘满造成了Mysql服务没法正常运行,首先腾硬盘空间,再停止mysqld服务,还用了下kill杀掉了mysqld进程,后来发现数据库虽然启动了,但是数据表损坏了,google搜索了下,用myisamchk修复了下数据表文件,成功。特录下文。

检查和修复MySQL数据文件

由于临时断电,使用kill -9中止MySQL服务进程,或者是Jessica的朋友idiot@%.host.net又犯了一个错误,所有的这些都可能会毁坏MySQL的数据文件。如果在被干扰时,服务正在改变文件,文件可能会留下错误的或不一致的状态。因为这样的毁坏有时是不容易被发现的,当你发现这个错误时可能是很久以后的事了。于是,当你发现这个问题时,也许所有的备份都有同样的错误。

MySQL参考手册的第十五章讲述了MySQL自带的myisamchk的功能,以及如何使用它检查和修复你的MySQL数据文件。虽然这一章对于每个想要搭建一个强壮的MySQL服务的人都是推荐阅读的,我们还是有必要在这里对其中的要点进行讨论。

在我们继续之前,你必须意识到myisamchk程序对用来检查和修改的MySQL数据文件的访问应该是唯一的。如果MySQL服务正在使用某一文件,并对myisamchk正在检查的文件进行修改,myisamchk会误以为发生了错误,并会试图进行修复–这将导致MySQL服务的崩溃!这样,要避免这种情况的发生,通常我们需要在工作时关闭MySQL服务。作为选择,你也可以暂时关闭服务以制作一个文件的拷贝,然后在这个拷贝上工作。当你做完了以后,重新关闭服务并使用新的文件取代原来的文件(也许你还需要使用期间的变更日志)。

MySQL数据目录不是太难理解的。每一个数据库对应一个子目录,每个子目录中包含了对应于这个数据库中的数据表的文件。每一个数据表对应三个文件,它们和表名相同,但是具有不同的扩展名。tblName.frm文件是表的定义,它保存了表中包含的数据列的内容和类型。tblName.MYD文件包含了表中的数据。tblName.MYI文件包含了表的索引(例如,它可能包含lookup表以帮助提高对表的主键列的查询)。

要检查一个表的错误,只需要运行myisamchk(在MySQL的bin目录下)并提供文件的位置和表名,或者是表的索引文件名:

% myisamchk /usr/local/mysql/var/dbName/tblName
% myisamchk /usr/local/mysql/var/dbName/tblName.MYI

上面的两个命令都可以执行对指定表的检查。要检查数据库中所有的表,可以使用通配符:

% myisamchk /usr/local/mysql/var/dbName/*.MYI

要检查所有数据库中的所有表,可以使用两个通配符:

% myisamchk /usr/local/mysql/var/*/*.MYI

如果不带任何选项,myisamchk将对表文件执行普通的检查。如果你对一个表有怀疑,但是普通的检查不能发现任何错误,你可以执行更彻底的检查(但是也更慢!),这需要使用–extend-check选项:

% myisamchk –extend-check /path/to/tblName

对错误的检查是没有破坏性的,这意味着你不必担心执行对你的数据文件的检查会使已经存在的问题变得更糟。另一方面,修复选项,虽然通常也是安全的,但是它对你的数据文件的更改是无法撤消的。因为这个原因,我们强烈推荐你试图修复一个被破坏的表文件时首先做个备份,并确保在制作这个备份之前你的MySQL服务是关闭的。

当你试图修复一个被破坏的表的问题时,有三种修复类型。如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次–这通常是上一次修复操作遗留下来的。

这三种修复方法如下所示:

% myisamchk –recover –quick /path/to/tblName
% myisamchk –recover /path/to/tblName
% myisamchk –safe-recover /path/to/tblName

第一种是最快的,用来修复最普通的问题;而最后一种是最慢的,用来修复一些其它方法所不能修复的问题。

检查和修复MySQL数据文件

如果上面的方法无法修复一个被损坏的表,在你放弃之前,你还可以试试下面这两个技巧:

如果你怀疑表的索引文件(*.MYI)发生了不可修复的错误,甚至是丢失了这个文件,你可以使用数据文件(*.MYD)和数据格式文件(*.frm)重新生成它。首先制作一个数据文件(tblName.MYD)的拷贝。重启你的MySQL服务并连接到这个服务上,使用下面的命令删除表的内容:

mysql> DELETE FROM tblName;

在删除表的内容的同时,会建立一个新的索引文件。退出登录并重新关闭服务,然后用你刚才保存的数据文件(tblName.MYD)覆盖新的(空)数据文件。最后,使用myisamchk执行标准的修复(上面的第二种方法),根据表的数据的内容和表的格式文件重新生成索引数据。

如果你的表的格式文件(tblName.frm)丢失了或者是发生了不可修复的错误,但是你清楚如何使用相应的CREATE TABLE语句来重新生成这张表,你可以重新生成一个新的.frm文件并和你的数据文件和索引文件(如果索引文件有问题,使用上面的方法重建一个新的)一起使用。首先制作一个数据和索引文件的拷贝,然后删除原来的文件(删除数据目录下有关这个表的所有记录)。

启动MySQL服务并使用当初的CREATE TABLE文件建立一个新的表。新的.frm文件应该可以正常工作了,但是最好你还是执行一下标准的修复(上面的第二种方法)。

Discuz!4.0及以上版本由UTF8转GBK的详细教程【告别乱码,拥抱插件】

0

分类 : 技术文摘 | 发表时间 18-08-2006

以前曾经遇到过类似的问题,但当时苦于没有比较完全的解决方法,现在又有解决原理,又有解决的工具,的确是完善的解决方法,盛重推荐.

经测试,此教程完全适用于Discuz4.0以上版本(包括Discuz4.0)

谨以此文献给因UTF8编码不能使用插件、不能安装特效、经常出现乱码、rss不能正常显示、郁闷至极的朋友们。

Section I 盾与矛:为啥要转换?

有很大一部分朋友在选择安装Discuz并不知道安装什么编码版本才合适,这里我把对这两个编码的理解和大家分享

QUOTE:

1、从数据库的尺寸上看,UTF8要大于GBK,20M的UTF8转成GBK后大概为16-17M

2、从论坛插件的支持上看,Discuz的拥戴者制作的插件基本上都是针对GBK的,UTF8的极少

3、从搜索引擎上看,MSN、YAHOO比较喜欢UTF8,会收录更快一些,因为它是国际上通用的编码,百度、google基本不受影响

4、从用户使用上看,UTF8更加适合欧洲、北美、香港用户通过FIREFOX等外国流行的浏览器浏览,GBK更适合大陆用户浏览

5、Discuz!官方推荐安装使用的是GBK

从上面可以看出,UTF8更适合外国朋友居多且不需太多要插件的论坛。GBK更适合普通一般的中国大陆用户。至于有些朋友说UTF8比GBK承载能力更佳,我使用了这么长时间,并没有感觉到有什么不同。

Section II 迷尘恋雾

转换过程貌似很复杂、很有难度,其实不然,出现错误的情况大多是由于人工失误、对MYSQL版本的不熟悉以及初次转换的懵懂、不感冒引起的,除了下面进行的详尽的分析之外,最后我还会列出一些常见失误和错误提示及解决方法,供大家对比参照。

Section III GBK也疯狂:插件我来了,乱码goodbye

QUOTE:

手把手教您转换编码,请按下面的步骤step by step,祝您成功!

转换总共包括两个部分:数据库编码的转换和论坛文件的备份
一、关于数据库的备份和编码转换的过程

1、首先进入后台-

数据库

-资料备份

数据备份类型里选择 全部备份

数据备份方式里选择默认Discuz! 分卷备份

- 文件长度限制(kb)即可,包的大小自己设置

QUOTE:

数据备份选项里(重要)其他不要设置,主要看“ 建表语句格式”,这里有两个选项※MySQL 3.23/4.0.x    ※MySQL 4.1.x/5.xMySQL建表语言在4.0.x-4.1.x做了修改,所以这里

[一定要注意正确的选择备份方式]



对于在原空间进行转换的朋友,这点可以忽略不计。

对于论坛搬家的朋友,Discuz! 提供了这样优秀的备份选项,一定要充分利用起来,在搬家前一定要检查新、旧服务器的MYSQL版本!

至于MySQL版本在新旧空间里在哪查看,其实很简单,在后台首页里就有,如下图:



2、提交,开始备份并完成备份。

3、利用ConvertZ工具对数据库编码进行转换

QUOTE:

Step1. 下载附件中的文件 ConvertZ.part1-part2.rar,解压缩到任意文件夹(自己取)

Step2. 打开此附件,双击ConvertZ.EXE运行

Step3. 见图说明



Step4. 见图说明



4、将转好的GBK数据库保存好,备用。

二、进行文件备份,也就是下载到本地(这里要备份的文件包括关系用户组头像的customavatars文件夹,

论坛附件的

attachments

文件夹,论坛图片文件

images

文件夹及论坛风格模板文件

templates

文件夹,共四个,其他所有文件均可以删除不要)

templates文件夹要特别说明一下,要备份的是

除原来的default(默认模板)其他所有模板文件夹

,因为default是包含语言包的,我们到时候会上传新的GBK的default(默认模板),所以
原来的这个不要,很重要,切记。

上面的重头戏完成了,下面的就简单多了

QUOTE:

1、保证全部文件备完之后,清除老空间的所有文件!(新空间不需要这一步,但请确认新空间是否正常运行,环境是否配置正确)

2、上传一个全新的Discuz!GBK编码论坛程序,进行安装。

3、安装成功后,将第一步中转换好的GBK数据库包全部通过FTP上传到论坛的forumdata文件夹下

4、进入新论坛后台-数据库-资料恢复-找到1号包-导入,1号包导完后会退出论坛(因为第一个包里含有原论坛的会员信息),这个时候你用原来论坛的管理员帐号密码即可登陆,继续完成导入,全部顺利导入则数据库恢复成功。

你可以进论坛前台,现在主题、贴子都能显示,但是附件和会员的头像不可见,需要进行下一步。

5、上传第二步开头备份的所有四个文件夹到论坛根目录下,进入后台,更新缓存,不相信自己的眼睛?已经转换成功了!Section IV  不要小看阴沟里翻船?常见问题

Q&A


QUOTE:

q1:为什么导入数据库导到一半就不能继续下去,有如下的提示?

QUOTE:

Discuz! info: MySQL Query Error

User: discuz

Time: 2006-5-17 6:40pm

Script: /admincp.php

SQL: INSERT INTO cdb_members VALUES(’121′,’?ۨ??’262a9631938f60f88df0c2618981af64′,’58e9b7f9′,’0′,’0′,’10′,’0′,”,’218.17.205.144′,’1145935498′,”,’1145935498′,’1145935498′,’1145935525′,’1′,’0′,’0′,’0′,’2′,’2′,’0′,’0′,’0′,’0′,’0′,’0′,’0′,’0′,’

[url=mailto:htbyc@gqvbs.com]

htbyc@gqvbs.com

[/url]

‘,’0000-00-00′,’0′,’0′,’0′,’0′,”,’12′,’0′,’0′,’1′,’0′,’+8′,’0′,’0′)

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’262a9631938f60f88df0c2618981af64′,’58e9b7f9′,’0′,’0′,’10′,’0′,”,’218.17.205.144′ at line 1

Errno.: 1064

Similar error report has beed dispatched to administrator before.答:这是语法错误,请在出错的sql(不能导入的那一卷)文件里仔细检查:

1、会员名是否出现乱码

2、帖子是否出现乱码

3、是否有不符合要求的字符出现

解决方法:根据错误提示在错误的sql卷里用查找找到出错的语句(如上面的提示就是“262a9631938f60f88df0c2618981af64”),手动删除,再上传至服务器重新导入,删除错误语句时注意语法结构,以删除整句为佳。

QUOTE:

q2:导入数据正常,为什么论坛全是"??????"?

答:请注意MYSQL版本是否正确,详情见上面一、关于数据库的备份和编码转换的过程中的MYSQL版本部分

QUOTE:

q3:转换好之后在使用论坛的过程中提示1062错误?

答:这是由于数据表没有添加Auto的缘故,解决方法可以看agfx版主所著的查看:出现 Errno: 1062 的解决方法

QUOTE:

q4:转换好之后发现所有用户的签名突然不能显示了!

答:请在发帖子时将

使用个人签名

勾上。

QUOTE:

q5:转换好之后进入主题后最上方有这样的提示!

QUOTE:

Warning: Invalid argument supplied for foreach() in e:\www\hz\jackiwen\wwwroot\bbs\viewthread.php on line 157解决方法:进入后台-Discuz! 选项-积分设置-扩展积分设置,

将您论坛曾用过的积分的选项勾上

在解决问题的过程中曾得到@鑫~#, asdf1999, agfx(排名不分先后)三位版主的帮助,非常感谢。


下载编码转换工具: ConvertZ.rar  解压密码:www.linwwan..com

摘录自:www.discuz.net社区

终于找到了解决discuz乱码的方法了

0

分类 : 技术文摘 | 发表时间 11-08-2006

一句话,真是碰上高人了!
对于别人来说,这个问题可能看不出来什么,但对于我来说,充分说明还是没有好好对待这个问题,事实上,只要细心多考虑,有些看起来很大的问题,还是很好解决的。
今天通过disczu提供的程序,把phpwind的数据库转为了discuz,另外,火山主机提供了1G的免费空间服务,申请了以后,就把discuz论坛传了上去,但对方是单电信的空间,我这边网通上传数据时,真是慢得要命!并且,还有很多文件少传字节错误,真是很不方便。
论坛建立以后,在本地论坛备份好数据库,通过ftp也上传到空间上去,然后在空间上的论坛内通过恢复数据库来导入数据,但在导入后,导入的数据在论坛内总是显示乱码;这个问题,以前也讨论过,这是mysql编码不同的原因引起的,但具体怎么样方便的解决这个问题,一直没有找到好的方法;这次,又出现这个问题,我就跑到disczu论坛上再次找了一下问题的解决方法,想不到,真有高人!并且解决的方法也很简单。而且据我所考虑,phpwind的编码问题,应该以此类推,也可以解决。
使用前提:后台能够正常导入备份数据,但完成后出现乱码;(我的正好是这种情况)
方法:
以下编码是discuz的config.inc.php文件内容,覆盖原config.inc.php,重新安装论坛,再次导入输入,完成。

并且作者还论证说,以前几个论坛出现乱码我都是这么做的,并且成功!但不保证所有乱码使用此方法都可以成功。

<?php

/*
  [Discuz!] (C)2001-2006 Comsenz Inc.
  This is NOT a freeware, use is subject to license terms

  $RCSfile: config.inc.php,v $
  $Revision: 1.14.2.1 $
  $Date: 2006/07/17 07:50:17 $
*/

// [EN]  Set below parameters according to your account information provided by your hosting
// [CH] 以下变量请根据空间商提供的账号参数修改,如有疑问,请联系服务器提供商

  $dbhost = 'localhost';      // database server
            // 数据库服务器

  $dbuser = 'dbuser';      // database username
            // 数据库用户名

  $dbpw = 'dbpasswd';      // database password
            // 数据库密码

  $dbname = 'dbname';      // database name
            // 数据库名

  $adminemail = 'admin@your.com';    // admin email
            // 论坛系统 Email

  $dbreport = 0;        // send db error report? 1=yes
            // 是否发送数据库错误报告? 0=否, 1=是


// [EN] If you have problems logging in Discuz!, then modify the following parameters, else please leave default
// [CH] 如您对 cookie 作用范围有特殊要求,或论坛登录不正常,请修改下面变量,否则请保持默认

  $cookiedomain = '';       // cookie domain
            // cookie 作用域

  $cookiepath = '/';      // cookie path
            // cookie 作用路径


// [EN] Special parameters, DO NOT modify these unless you are an expert in Discuz!
// [CH] 以下变量为特别选项,一般情况下没有必要修改

  $headercharset = 1;      // force outputing charset header
            // 强制设置字符集,只乱码时使用

  $errorreport = 1;      // reporting php error, 0=only report to admins(safer), 1=report to all
            // 是否报告 PHP 错误, 0=只报告给管理员和版主(更安全),不报告钩子错误, 1=报告给任何人并报告钩子错误

  $forcesecques = 0;      // require security question for administrators' control panel, 0=off, 1=on
            // 管理人员必须设置安全提问才能进入系统设置, 0=否, 1=是

  $onlinehold = 900;      // time span of online recording
            // 在线保持时间

  $pconnect = 0;        // persistent database connection, 0=off, 1=on
            // 数据库持久连接 0=关闭, 1=打开


// [EN] !ATTENTION! Do NOT modify following after your board was settle down
// [CH] 论坛投入使用后不能修改的变量

  $tablepre = 'cdb_';         // 表名前缀, 同一数据库安装多个论坛请修改此处
            // table prefix, modify this when you are installingmore than 1 Discuz! in the same database.

  $attachdir = './attachments';    // 附件保存位置 (服务器路径, 属性 777, 必须为 web 可访问到的目录, 不加 "/", 相对目录务必以 "./" 开头)
            // attachments saving dir. (chmod to 777, visual web dir only, ending without slash

  $attachurl = 'attachments';    // 附件路径 URL 地址 (可为当前 URL 下的相对地址或 http:// 开头的绝对地址, 不加 "/")


// [EN] !ATTENTION! Preservation or debugging for developing
// [CH] 切勿修改以下变量,仅供程序开发调试用!

  $database = 'mysql';     &nb
sp;// 'mysql' for MySQL version and 'pgsql' for PostgreSQL version
            // MySQL 版本请设置 'mysql', PgSQL 版本请设置 'pgsql'

  $charset = 'gbk';      // default character set, 'gbk', 'big5', 'utf-8' are available
            // 论坛默认字符集, 可选 'gbk', 'big5', 'utf-8'

  $dbcharset = 'latin1';      // default database character set, 'gbk', 'big5', 'utf8', 'latin1' and blank are available
            // MySQL 字符集, 可选 'gbk', 'big5', 'utf8', 'latin1', 留空为按照论坛字符集设定

  $attackevasive = 0;      // protect against attacks via common request, 0=off, 1=cookie refresh limitation, 2=deny proxy request, 3=both
            // 防护大量正常请求造成的拒绝服务攻击, 0=关闭, 1=cookie 刷新限制, 2=限制代理访问, 3=cookie+代理限制

  $tplrefresh = 1;      // auto check validation of templates, 0=off, 1=on
            // 模板自动刷新开关 0=关闭, 1=打开

// ============================================================================

无觅相关文章插件,快速提升流量