懶的更新到blogger了

本站2010年10月以後的,都更新到google docs上了:
連結在這裡

2008/02/06

第一次寫utf8的php程式

今天是除夕,想不到竟然是整天在家沒出去,
沒辦法,誰叫天氣那麼冷……

好了,言歸正傳。
仔細想想,雖然之前曾經把所架的phpBB從big5轉到utf8,
但是好沒從來沒有自己寫過utf8的php程式。

今天正好有一些小資料想要把它轉成phpBB發文時我想要的bbcode格式,
資料是放在google線上spreadsheet裡,裡面有繁中、簡中、日文字(google服務都是使用utf8)
本來想用Excel去處裡的,可是家裡電腦沒有灌Excel,
後來也想使用OpenOffice.org的Calc,可是打開後怎麼有些字顯示不出來……不太保險的感覺。
所以打算自己寫,把它們都放進MySQL再寫php程式來產生我要的格式,
大材小用? 殺雞用牛刀?...反正就順便也練習嘛~

編輯utf8的編輯器:使用 MadEdit...超好用的。
資料的部份,本來想就開始寫php程式來匯入,後來發現phpMyAdmin可以匯進csv檔,
那當然就從google spreadsheet匯出的txt檔去改成phpMyAdmin所使用的csv格式
(格式是 "欄位1";"欄位2";"欄位3"; .......預設用「"」和「;」....不過是可修改的 ^^)
這邊也確定放進到MySQL的資料是utf8編碼的資料。

開始吧,寫的php是utf8的編碼,資料庫裡也是utf8編碼,
寫出來執行的結果......果然和我想的一樣,一大堆的 ??? 。
雖然早料到會如此,可是還是很傷心 ^^

網路時代,不浪費時間,馬上用google查「php utf8」,果然已經早有解決方法了,
我參考這篇:分享MySQL和php採用UTF8的詳細方法

裡面寫到了可以改的地方還真不少,不過,我自己也沒有全改,只改我自己認為可能的地方,
  • 0.先決條件:資料一定是utf8編碼(包含php程式碼和放進資料庫的東西.....廢話)
  • 1.我沒有使用php的header函數
    header('Content-Type: text/html; charset=utf-8');
    倒是有把phpBB的標頭copy過來用(順便copy一份,下次可以用)
    echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
    echo "<html dir=\"LTR\">\n";
    echo "<head>\n";
    echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n";
    echo "<body>\n";
    echo "</body>\n";
    echo "</html>\n";
    (↑應該用單引號「'」的,但我希望產生的原始碼好看些 ^^ ,當然,關鍵是utf-8那一行)
  • 2.再來是建立資料庫時
    CREATE TABLE `table1` (
    `sn` INT UNSIGNED NOT NULL ,
    `title` VARCHAR( 60 ) NOT NULL ,
    ) ENGINE = MYISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    說真的COLLATE關鍵是什麼我不知道,但我還是加上去了。
  • 3.我覺得這個才是真正的關鍵,在開始query資料之前,先執行:
    mysql_query("SET NAMES 'utf8'");
    mysql_query("SET CHARACTER_SET_CLIENT=utf8");
    mysql_query("SET CHARACTER_SET_RESULTS=utf8");
    然後我的程式就可以正常運作了。
  • 文章裡面提到的php.ini , httpd.conf , my.cnf 還有cache什麼的,我就都沒改了
    (其實我有改過php.ini,但改完後再改回來,我的程式還是可以正常運作)
其他....好像沒什麼好寫的了,暫時到這裡。
--
相關php函數、範例查詢 http://www.php.net/

沒有留言: