前几天我把我使用的o-blog转换为utf8了。现在我整理了一下资料,把转换的过程记录下来,与大家分享一下经验,希望o-blog的新版本中可以出现utf8版本。我现在使用 o-blog 的版本为2.6如果版本不对,请你下载2.6版本.
在转换之前,我有必要提醒你一下,你必须要把所有的网页和数据库的内容备份一下,万一转换的过程失败,你也可以迅速恢复数据或者可以重新转换。
如果你备份好数据了,那我们开始吧。我转换的思想是:将所有的文本文件的编码改为utf8,再建立新的charset为utf8的数据库。
首先,要把o-blog使用的所有文本文件的编码改为utf8,这里所说的文本文件包括o-blog所有的php和模板文件中的html、css文件。上网搜索了一下,可以选择的工具有UltraEdit和EditPlus。不过我使用的是EditPlus。将一个打开,再选择另保存为,再覆盖原来的文件就可以了。在此过程,可能有些文件的编码无法保存为utf8,可以先不管。
下面开始修改文件。
打开 admin/class/mysql.php,找到下面的这一行
mysql_select_db($dbname);
在其前面加入以下代码:
if($this->version() > '4.1') {
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER_SET_CLIENT=utf8");
mysql_query("SET CHARACTER_SET_RESULTS=utf8");
} else
if($this->version() > '5.0.1') {
mysql_query("SET sql_mode=''");
}
使用EditPlus菜单“查找”下的“在文件中查找”对话框查找charset=gb2312,其中文件夹选择o-blog所在的目录,这样可以省很多的功夫.找到后把charset=gb2312替换为charset=utf-8.
其次要修改原来install.php文件
把 TYPE=MyISAM 替换为 ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci。
然后在你的空间中运行install.php,进行新的安装,如果你使用的数据库和原来的那个相同,我特别要提醒你,使用的表的前缀必须要和原来的不同,要不然会造成数据库里面原来的数据被覆盖。
安装结束后你可以打开o-blog来看看页面上是否出现乱码,如果出现了乱码,你得查看你使用php文件和模板文件的编码是否为utf8. 如果显示的文字,还未算转换成功。由于o-blog里面使用的切割字符串函数并不是用来切割utf8字符集,在切割得出的字符串中最后一个汉字的编码很有可能不完全,这样在网页的源代码中看到的所有中文是乱码。下面要打开admin/functions.php查找 “cn_substr”函数,大概在272行,在其前面加入以下函数:
// 用来避免 utf8 乱码
function utf8_trim($str) {
$len = strlen($str);
for($i=strlen($str)-1;$i>=0;$i-=1){
$hex .= ' '.ord($str[$i]);
$ch = ord($str[$i]);
if(($ch & 128)==0) return substr($str,0,$i);
if(($ch & 192)==192)return substr($str,0,$i);
}
return($str.$hex);
}
前往 291 行,就会看到 return $s."...";
在前面一行加入调用utf8_trim的以下代码
$s = utf8_trim($s);
这样的做法存在冗余的代码,不过这样做是最为简单的,希望风色可以进行改进。
按照网上的说法,还要修改函数htmlspecialchars,把原来的用法
$s=htmlspecialchars($s);
改为 $s = htmlspecialchars($s,ENT_QUOTES,"UTF-8");
我修改了一部分就没有修改了,因为我发现blog已经没有乱码问题了,查看数据库里面的内容,挺很正常。所以我也不知道那个修改有没有用了,有兴趣的网友可以试试看。
不知道你们转换怎么样了呢?我的可以正常运行了。
下面还有一个问题,怎么样把原来的数据导入到里面去。我想到了两个解决的方向。
第一、后台里面的数据的导入导出。导入的数据会转换为gb2312,这是与现在使用utf8冲突的,这就需要修改现在代码,把原来备份的数据导进去。我没有深入了解那部分的代码,所以我不知道怎么修改,解决了导入,还要解决导出的问题。
第二、在另外一个博客程序cblog中,有把o-blog转换为cblog的程序,可以把gb2312编码的数据转换为utf8并插入到现在使用的数据库里面去。可能修改一下代码就可以拿来用了。可是这部分我也没有研究,我的日志比较少,基本上已经手动输入到现在使用的博客里面去了。
希望风色或者longbill研究一下,怎么处理好数据的导入导出这部分,更加希望拥有新版本的o-blog。
如果文章中还有遗漏的地方,请提出来,我边修改边测试的,当时没有作记录,现在也是考记忆来写这篇文章了。
我在写这篇文章的时候,longbill也处理好转换为utf8的问题了,呵呵,恭喜!
-
订阅
-
-
-
美国VPS/域名/服务器/VPN等代购:http://shop63846532.taobao.com
-
文章分类
-
随机文章
-
最近评论
-
ocrmaker:
我来推荐一个手机端也可以使用的免费在线文字图片识别的工具:ocrmaker,绝对不坑... -
黄智豪:
抱歉我说错了,是字的颜色很不好看... -
黄智豪:
这字体很不好看... -
博闻雅记:
博主,php升级的时候能不能改成中国节点呢?... -
aarondd:
可以下载?... -
lazy:
thx... -
semirHR:
管用!3Q... -
licess:
@knd2, 转入是续一年... -
不能安装该软件因为目前不可在软件更新服务器:
不能安装该软件因为目前不可在软件更新服务器 安装一会出现这个错误,请问这个是怎么回事呢? 10.... -
knd2:
你好,楼主,我在godaddy上的域名还有3个月到期,现在转到name是不是这3个月就失效了。还有我...
-
ocrmaker:
-
links
-
Archives
- 2022年六月
- 2016年六月
- 2015年六月
- 2014年六月
- 2013年十二月
- 2013年十月
- 2013年七月
- 2013年六月
- 2013年五月
- 2013年四月
- 2013年三月
- 2013年二月
- 2013年一月
- 2012年十二月
- 2012年十一月
- 2012年六月
- 2012年五月
- 2012年四月
- 2012年二月
- 2011年十二月
- 2011年十一月
- 2011年十月
- 2011年九月
- 2011年六月
- 2011年五月
- 2011年四月
- 2011年三月
- 2011年二月
- 2010年十二月
- 2010年十一月
- 2010年十月
- 2010年九月
- 2010年八月
- 2010年七月
- 2010年六月
- 2010年五月
- 2010年四月
- 2010年三月
- 2010年二月
- 2010年一月
- 2009年十二月
- 2009年十一月
- 2009年十月
- 2009年九月
- 2009年八月
- 2009年七月
- 2009年六月
- 2009年五月
- 2009年四月
- 2009年三月
- 2009年二月
- 2009年一月
- 2008年十二月
- 2008年十一月
- 2008年十月
- 2008年九月
- 2008年八月
- 2008年七月
- 2008年六月
- 2008年五月
- 2008年四月
- 2008年三月
- 2008年一月
- 2007年十二月
- 2007年十一月
- 2007年十月
- 2007年九月
- 2007年八月