Discuz从GBK转码UTF-8的最佳方法

最近由于论坛帐号整合需要,不得不把原蓝卡论坛的GBK编码转换为UTF-8,由于Discuz官方并没有提供转换工具,网上也没有什么靠谱的教程,而且论坛中数据较多,可闪失不得,这不禁让我十分为难。。

我先尝试了网上比较流行的一种利用Discuz数据库功能进行数据库备份、恢复达到转换目的的方法,可是在我按照教程进行操作后,发现虽然前台的帖子、用户等数据全部恢复,但是后台的数据全部丢失!且还有部分乱码的情况出现,要重新设置那么多后台选项,我才不干呢!于是,我便开始琢磨另一种转换方法,当我看到另一篇教程,让我们用文本编辑工具将DZ程序文件手动转换编码然后再转换数据库编码达到转换目的的方法后(几乎不能成功),我突然灵机一动,想到了!这种方法成功率非常高!下面便是详细教程:

备份

不管怎么说,备份都是必须的!

全新安装Discuz!

首先,我们要去Discuz官网下载UTF-8版本的Discuz(必须要与GBK论坛同版本),并全新安装它到服务器上,最好使用一个单独的子域名,和一个单独的数据库,方便后面操作,注意:数据库前缀最好与GBK论坛一样,当然,如果你无法使用更多的数据库,只能将GBK与UTF安装到同一数据库中,那又另当别论!(后面的操作都是在两个论坛安装在不同数据库的基础上进行的,若两论坛安装在同一数据库内,某些操作可能会出现问题,请务必备份!)

转换数据库编码

转换数据库编码的最好方法便是导入导出,首先在Phpmyadmin内将GBK论坛的数据库导出为sql文件,编码选择utf-8,下载到本地后,用记事本打开它,查找CHARSET=gbk替换为CHARSET=utf8即可

导入数据库

替换完毕后,删除UTF8论坛的所有数据表,然后用phpmyadmin导入刚才修改好的sql文件,编码选择utf-8,导入完成后,数据库的转换便完成了!注意:若GBK论坛和UTF论坛的数据表前缀不同,导入数据库后还需要到UTF论坛的config目录里的config_global.php里修改数据表前缀,否则无法正常运行!

转换模版与插件

转换好数据库后,论坛并不能直接开始使用,因为GBK论坛使用的插件和模版都不能适用于UTF-8论坛,首先我们需要将GBK论坛的source/plugin目录覆盖到新论坛,再进入新论坛后台“插件”选项,对插件尝试卸载,若能正常弹出卸载提示的插件则不用管,若卸载时提示“插件文件缺失”,则需要重新进入数据库,找到数据表pre_common_plugin(pre是你的表前缀),删除提示“插件文件缺失”的插件,然后再进入后台重新安装(注意:若提示无法安装,请参考此教程修改DZ文件后再尝试安装:http://blog.csdn.net/luxiaoyu_sdc/article/details/7666864)用这种方法进行处理,直至所有的插件都能正常卸载,插件的处理便完成了!注意:若发现有插件在数据表中删除后在后台无法安装,则是该插件不支持UTF-8编码,需要给该插件手动转换编码并增加UTF-8编码的XML,参见:http://www.wanghailin.cn/scka/discuz-plugin-utf/,注意,使用这种方法进行处理后,插件的设置会丢失,大家可以从GBK论坛手动复制插件的设置参数

接下来转换模版,将GBK论坛的template目录下的你使用的模版复制到UTF-8论坛,并将模版下载到本地,将含有中文字符的文件用记事本进行另存为即可,不推荐使用批量编码转换工具对模版进行编码转换,容易出现问题,转换完毕后,重新上传,便可以使用了!

校验是否转换成功

进入新论坛Discuz后台,选择站长-数据库-校验,进行数据库校验,若提示“您的数据库完整无误”则是转换完美成功,否则请将检测出编码不正常的数据表导出,然后用上面的替换法转换编码后,删除数据库中的对应数据表,再导入即可!

迁移为主论坛

至此,整个转换过程便结束了!若到此处都还没有出现问题,那么老论坛的备份就可以删除了,删除老论坛的数据表和程序文件后,新论坛便可以复制到老论坛所在的目录,不过我个人觉得数据库是没有必要更换的,删掉老论坛的数据库就行,注意:若迁移涉及到域名的变化,一定要到后台修改Ucenter的通信地址,进入Ucenter看到通信成功,即为迁移成功!(由于UC的数据库也被恢复,通信密钥可能为老论坛的,请注意更换,否则无法通信成功)

小问题

由于UTF-8和GBK论坛的部分数据表有结构上的不同,这样硬转换后可能导致部分功能不正常,如设置个人资料,转换后极其有可能出现问题,请参考此贴方法解决(Discuz! X3测试通过):http://www.discuz.net/thread-2536784-1-1.html

总结

这种转换方法成功率非常高,但是稍显麻烦,对站长朋友的技术基础也有一定要求,小白站长还是不要尝试了,这种方法转换后,后台设置基本能够比较完整的保存下来,用户名等也不会出现乱码(至今我还没有发现任何地方有乱码情况的出现),不过转换极小部分后台数据会造成丢失,不过并不影响正常使用,只需简单设置即可!

时间: 2024-10-06 11:50:57

Discuz从GBK转码UTF-8的最佳方法的相关文章

golang 编码转换 gbk转码utf 爬虫中文乱码

golang仅支持utf-8, 使用爬虫时经常遇到不是utf-8编码的文件, 如果抓取则会造成文字乱码 1. 下载导入包 import "github.com/axgle/mahonia" 2. 定义函数 func ConvertToString(src string, srcCode string, tagCode string) string { srcCoder := mahonia.NewDecoder(srcCode) srcResult := srcCoder.Conver

jquery源码解析:jQuery工具方法详解1

jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({       //当只有一个对象时,就把这个对象中的属性和方法扩展到this对象中,这里的this指向jQuery expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), //唯一性,core_version 为jQuery

Java源码转C#源码的五款最佳工具

Java源码转C#源码的五款最佳工具 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 出于某些需要,你可能会遇到把Java源码转换成C#源码的任务.如果是自己一边理解源码,再一边手工翻译,那效率肯定是很低的.有鉴于此,本文推荐了五款最佳的源码转换工具,以解决你的烦恼.工具1#:Java语言转换器助手地址:http://www.microsoft.com/en-us/download/details.aspx?id=14349 Java语言转换器助手是

jquery源码解析:jQuery工具方法详解2

jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... type: function( obj ) {    //$.type(),判断类型 if ( obj == null ) {   //null,undefined return String( obj );    //返回null,undefined字符串 }     //core_toString = {}.toString 

[python]UnicodeEncodeError: 'gbk' codec can't encode character 解决方法

在windows下面编写python脚本,编码问题很严重. 将网络数据流写入文件时时,我们会遇到几个编码: 1: #encoding='XXX' 这里(也就是python文件第一行的内容)的编码是指该python脚本文件本身的编码,无关紧要.只要XXX和文件本身的编码相同就行了. 比如notepad++ "格式"菜单里面里可以设置各种编码,这时需要保证该菜单里设置的编码和encoding XXX相同就行了,不同的话会报错 2:网络数据流的编码 比如获取网页,那么网络数据流的编码就是网页

jquery源码解析:jQuery工具方法详解3

jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... each: function( obj, callback, args ) {   //$.each(arr , function(i,value){}),第三个参数用于内部调用.此方法就是来遍历数组的,然后取数组中的值进行显示.不能改变原数组arr,跟map一样,但是map返回新数组,而each返回原数组.这里跟原生的forEa

Discuz! X2.5 添加自定义数据调用模块(简单方法)

转:http://521-wf.com/archives/46.html Discuz! X2.5 添加自定义数据调用模块(简单方法) Discuz!X系列的diy功能还是相当不错的,在对其进行二次开发的过程中,或许需要加入新的数据调用模块,这样可以使你开发的功能模块也像原来的模块一样,只需要点点鼠标,填写一些简单的信息,就可以在各个页面的各个位置显示你想显示的数据啦. 以下就目前最新版X2.5做一个简答的介绍:大致可以分为以下三个步骤:一.添加数据调用程序二.后台更新diy模块分类缓存三.添加

cocos2d-x 源码分析 之 CCTableView源码分析(附使用方法讨论)

cocos2d-x源码总目录 http://blog.csdn.net/u011225840/article/details/31743129 源码来自2.x,转载请注明 1.继承结构 首先来看下CCTableView的继承结构 从继承结构上看,CCTableView是一种CCScrollView,所以为了研究CCTableView的源码,清先去了解CCScrollView的源码http://blog.csdn.net/u011225840/article/details/30033501. 其

关于微信网页/H5游戏开发中二维码无法识别的解决方法

我接触微信H5开发已经有一年多了,做过很多案例也遇到很多的问题.今天我把困扰我半年之久的问题分享出来,也就是关于微信网页/H5游戏开发中二维码无法识别的解决方法. 我在百度搜索了许久,关于微信H5网页/游戏开发问题以及解决方案的相关文章少之又少,在相关前端交流群中问别人,一问三不知,平时这些群就会上班吹牛逼,真正交流问题的人少又少,真是揪心啊,最后还是得靠自己解决了. [这里,我先举个栗子] 上面这个页面,相信从事微信H5开发的人应该很熟悉,就是常见的分享到朋友圈的页面,通常以[引导分享图标]+