●架設主機作業系統:Windows Xp SP2
●快速架站程式:Appserv 2.4.6 (MySQL 維持 4.0.24)
●phpBB2 版本:phpBB 2.0.21 (big5)
前言:
搞了一陣子, 終於成功將論壇以及資料庫, 轉 UTF-8 編碼.
茲將個人的成功經驗與大家分享, 希望避免您走 '冤枉' 路.
前置作業:
記住! 只要有完善的備份, 就可以避免資料的流失.
若是自己的主機架站, 則複製整個資料夾, 絕對是最有效的備份方法.
www/phpb2/*.* (ps. 'phpbb2' 請更改為您的論壇根目錄名稱)
mysql/data/phpbb/*.* (ps. 'phpbb' 請更改為您的資料庫名稱)
另外, 請暫時關閉論壇!
第一步, 是將論壇語系由 big5 轉 utf-8 碼
這部份, 只要藉由轉碼工具 ConvertZ, 便可以輕鬆將編碼轉換;
主要是論壇的 '語言檔代碼' (language/lang_chinese_traditional_taiwan/*.*) 必須轉換.
但是, 如果您有安裝其他外掛, 例如: 水怪, 虛擬形象, 虛擬寵物,...等,
那麼, 還必須轉換該外掛相關的附加檔案 (*.php, *.tpl) 才行.
參考連結:
http://phpbb-tw.net/phpbb/viewtopic.php?p=230924#230924
另外, 推薦您, 一個好用的文書編輯軟體 EmEditor
只要另存新檔時, 選擇 utf-8 碼 (不要加入 BOM), 即可轉碼成功.
參考連結:
http://www.softking.com.tw/soft/detail. ... e=EmEditor
相關檔案轉碼後, 還必須進行一些微調的工作.
1. 修改 language/lang_chinese_traditional_taiwan/lang_main.php
#
#-----[ FIND ]-----
#
代碼: 選擇全部
$lang['ENCODING'] = 'big5';
#-----[ REPLACE WITH ]-----
#
代碼: 選擇全部
$lang['ENCODING'] = 'utf-8';
參考連結: (感謝 神川小羽 分享)
http://phpbb-tw.net/phpbb/viewtopic.php?p=231944#231944
或者, 參考這個討論串的修改方法, 解決論壇信件亂碼的問題.
http://phpbb-tw.net/phpbb/viewtopic.php?t=39710
第二步, 是將資料庫由 big5 轉 utf-8 碼
準備工作:
- 調整 (加大) php.ini 的相關設定, 以便於資料的匯出和匯入.
max_execution_time =
max_input_time =
memory_limit =
post_max_size =
upload_max_filesize =
ps. 數值大小, 請自行決定; 設定完成, 須重新啟動 Apache 伺服器, 才能生效. - (建議) 清空部份資料表的資料, 避免因檔案太大造成作業停頓.
phpbb_search_wordlist
phpbb_search_wordmatch
phpbb_sessions
進入 phpMyAdmin, 找到論壇資料庫,
選擇要匯出的資料表, 勾選加入 '刪除資料表' 語法,
勾選 '下載儲存', 執行,
選擇存放的檔名或位置後, 按確定.
ps. 比較大的資料表, 建議您, 分批匯出.
2. 將匯出的資料轉碼
這部份, 同樣是只要藉由轉檔工具 ConvertZ, 便可以輕鬆將編碼轉換.
最大的問題, 在於原先的 big5 碼中文字
部份在轉成 utf-8 後, 會 (保留) 多加一條反斜線 '\'
導致轉碼後, 資料匯入時, 產生錯誤的語法.
因此轉碼前, 可以先針 ConvertZ 對做一些設定,
使其過濾 '衝碼字', 盡量減少匯入時錯誤的發生.
參考連結: (感謝 linux_xp 分享)
http://phpbb-tw.net/phpbb/viewtopic.php?t=41901
http://phpbb-tw.net/phpbb/viewtopic.php?p=245104#245104
第三步, 是將轉碼後的資料, 重新匯入資料庫
由於匯出前, 有勾選加入 '刪除資料表' 語法,
因此匯入時, 若原先的資料表存在的話,
則會先將原先的資料表刪除後, 再重新建立.
當然, 上述的方法, 不見得可以百分之百過濾衝碼字,
如果資料匯入時, 仍舊出現語法錯誤的話,
那麼只好依據錯誤訊息自行除錯.
最後收尾:
仔細觀察論壇的運作, 盡量去除因轉碼所造成的錯誤.
哪些是論壇轉碼匯入成功後, 最容易造成的錯誤呢?
1. 沒有過濾掉的衝碼字, 如果沒有位於句末,
那麼在順利匯入資料庫時, 便會出現反斜字 '\'.
這個現象, 其實可以忽略; 如果太過礙眼, 那麼手動去除即可.
2. 由於一個 UTF-8 碼的中文字, 約佔 1~4 的字元 (byte),
因此, 很可能會造成, 原先欄位 '預設的字元數' 不敷使用,
進而形成句末出現 '亂碼' (斷尾) 的情況.
這時, 除了必須更改 (加大) 資料庫中, 相關資料表的欄位預設字元數之外,
同時, 也可能需要調整 (加大) 相關的檔案 (*.php, *.tpl) 裡頭的設定.
參考連結: (感謝 神川小羽 分享)
http://phpbb-tw.net/phpbb/viewtopic.php?p=218078#218078
如果您在轉換過程中, 有任何新的發現,
那麼請記得來 '竹貓' 分享您寶貴的經驗.