前幾天我把我使用的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年八月