對這文章發表回應
發表限制: 非會員 可以發表
發表者: 冷日 發表時間: 2008/3/19 6:38:40
鑑於本次冷日要再Windows上面透過XAMPP寫一個系統,
其中使用Apache/2.2.2 (Win32) PHP/5.1.4 與 MySQL - 5.0.21 作為平台,
然後冷日採用 BugFree1.0 + phpBB 2.0.20 還有 phpMyAdmin - 2.8.1。
此時碰上了MySQL常見的UTF-8問題,
簡單來說,就是 MySQL 預設內部是用 latin1 處理資料,
所以外表看似 UTF-8 的網站實際資料卻並非純正 UTF-8。
用 mysqldump 看就會發現全都是亂碼,
直接在 mysql 裡 SELECT 出來的也全是亂碼,
phpMyAdmin也無法正常顯示輸入的資料!
冷日的處理方法如下:
1.備份資料庫:
2.轉換編碼:
使用ConvertZ把 bugfree_latin1.sql、phpBB2_latin1.sql 分別用utf-8編碼另存為bugfree_UTF8.sql、phpBB2_UTF8.sql
然後把bugfree_UTF8.sql、phpBB2_UTF8.sql這兩個檔案裡面所有的「latin1」這字眼取代為「utf8」
3.設定MySQL:
修改my.cnf,在client區段加入default-character-set=utf8,如下
在mysqld區段加入utf8設定,如下
4.倒回資料:
5.重新啟動MySQL
6.修改資料庫連結:
在每個(就是BugFree與phpBB)資料庫連結Function檔案裡,只要db connect上以後,馬上加入這一行:
這樣就大功告成啦!
順便提一下, UTF-8 編碼的東東,在透過 get 傳遞的時候,常常會有怪怪的狀況,
比方說使用者要設定「永遠將URL傳送成UTF-8」或是明明已經設定好了,卻還是會有和其他英文字碼混在一起變亂碼的問題,
這時候請使用php內建的函式「rawurlencode」!
使用方法如下:
如此你的字串不管是啥編碼,都會被轉成RFC1738的URL編碼,應該就不會錯了啦!
至少冷日測試是OK的喔。
其中使用Apache/2.2.2 (Win32) PHP/5.1.4 與 MySQL - 5.0.21 作為平台,
然後冷日採用 BugFree1.0 + phpBB 2.0.20 還有 phpMyAdmin - 2.8.1。
此時碰上了MySQL常見的UTF-8問題,
簡單來說,就是 MySQL 預設內部是用 latin1 處理資料,
所以外表看似 UTF-8 的網站實際資料卻並非純正 UTF-8。
用 mysqldump 看就會發現全都是亂碼,
直接在 mysql 裡 SELECT 出來的也全是亂碼,
phpMyAdmin也無法正常顯示輸入的資料!
冷日的處理方法如下:
1.備份資料庫:
mysqldump -u root -p --default-character-set=latin1 --add-drop-table bugfree > bugfree_latin1.sql
mysqldump -u root -p --default-character-set=latin1 --add-drop-table phpBB2 > phpBB2_latin1.sql
2.轉換編碼:
使用ConvertZ把 bugfree_latin1.sql、phpBB2_latin1.sql 分別用utf-8編碼另存為bugfree_UTF8.sql、phpBB2_UTF8.sql
然後把bugfree_UTF8.sql、phpBB2_UTF8.sql這兩個檔案裡面所有的「latin1」這字眼取代為「utf8」
3.設定MySQL:
修改my.cnf,在client區段加入default-character-set=utf8,如下
[client]
default-character-set=utf8
在mysqld區段加入utf8設定,如下
[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
default-character-set = utf8
default-collation = utf8_general_ci
4.倒回資料:
mysql -u root -p bugfree < bugfree_UTF8.sql
mysql -u root -p phpBB2 < phpBB2_UTF8.sql
5.重新啟動MySQL
6.修改資料庫連結:
在每個(就是BugFree與phpBB)資料庫連結Function檔案裡,只要db connect上以後,馬上加入這一行:
mysql_query("SET NAMES 'UTF8'");
這樣就大功告成啦!
順便提一下, UTF-8 編碼的東東,在透過 get 傳遞的時候,常常會有怪怪的狀況,
比方說使用者要設定「永遠將URL傳送成UTF-8」或是明明已經設定好了,卻還是會有和其他英文字碼混在一起變亂碼的問題,
這時候請使用php內建的函式「rawurlencode」!
使用方法如下:
string rawurlencode (string str)
如此你的字串不管是啥編碼,都會被轉成RFC1738的URL編碼,應該就不會錯了啦!
至少冷日測試是OK的喔。