3-2 網頁編碼很重要嗎?
Date:十二月 8, 2009 | Author:eggggg
各位經常瀏覽網頁,不覺得網頁編碼是很重要的事情,但是在PHP與MySQL的世界裡,網頁編碼是很重要的事情!
PHP5時代支持UTF-8編碼,而PHP6則將UTF-8設定為預設編碼,對於東亞地區雙位元的文字,可提供更好的支援。MySQl 4.1版之後不僅支持UTF-8編碼,而且更進一步地可在資料庫、資料表、欄位上設定語系,也可在查詢時指定語系。因為MySQL4.0(含)之前是不管編碼(預設是latin1)的,網頁要如何顯示,是交由html的<meta>標籤與編碼格式來決定的。所以MySQL的這一個改變,讓很多網站在升級之後,就會變成亂碼顯示。
但MySQL為何要這樣做呢?MySQL這樣做的目的,是讓您可在一個資料庫內存放不同編碼的資料。所以網頁必須設定好編碼,PHP才可依照您指定的編碼作資料存取,但如果沒有設定好,那網頁或者資料庫裡將變成火星文而難以閱讀。
很多人不願讓PHP與 MySQL升級,就是因為編碼。其實,隨者網路的發達,除非您的網站有特別限制,否則可預期會有來自全球各地的朋友觀看您的網頁或留言。很多公司現在將公司的部門分散在全球各地,或者要滿足全球各地的客戶,網頁上必須能顯示正體中文、簡體中文、日文、泰文,那該怎麼辦?
一個網頁只能顯示一種編碼的文字,所以若一個網頁內需包容多個語系的文字,您可能會將其他編碼文字用圖片方式顯示,但這樣的處理方式,其實是很麻煩的。假如使用UTF-8,就可以解決這個問題,將所有文字全部都包含進去。因此不論您使用哪一個地區的文字均可用相同的編碼顯示。
PHP與Big5編碼裡裡的若干文字有語法上的衝突,更是讓我們不得思考是否要將編碼改為UTF-8。
Big5編碼設計時用兩個Bytes來代表一個中文字,例如「淚」這一個字的編碼是"B25C〞。每個中文字的第一個Byte使用ASCII裡的高字元(129-255),第二個Byte用到了部分低字元(1-128),但沒有排除ASCII的控制碼,所以這樣的設計也成為日後各種資訊應用上不便的原因。
5C這個編碼就是「\」,在PHP裡面是被拿來當跳脫字元使用,也就是說當變數裡有單引號或雙引號時,為了可以正確顯示這些特殊字元,通常需要多加一個「\」,例如以下的範例,而這裡的「echo」指將後面的文字回應在網頁上。(檔案名稱:「3」資料夾內「abctest.php」)
| 01 |
<html><head><title>第一個PHP網頁</title> |
| 02 |
</head><body> |
| 03 |
<? |
| 04 |
echo "\"nabc test"; |
| 05 |
?></body></html> |
網頁上原本應該顯示
\"nabc test,但實際上,您在瀏覽器上會看到:

【圖3 網頁內顯示:”nabc test】
我們回頭檢視剛剛設計的big5.php,問題出在哪裡呢?因為功的第二個Byte是 5C ,加上後面接的是雙引號,因此經過解譯之後,最後面的雙引號被認定為文字,進而造成語法少了最後那個雙引號,所以才會出現問題。
也許各位想用函數的方式做文字的過濾,讓中文字能順利顯示,但這樣處理的方式,其實會增加網頁維護的困難度,Unicode的環境既然是不能避免(Linux環境早就是Unicode編碼),PHP與Big5在編碼上既然有衝突,且MySQL又預設為UTF-8編碼,那麼我們應該趁早準備,早點將網頁與資料庫改為UTF-8編碼。
接下來:3-3 將網頁轉換成UTF-8
葉建榮 jiannrong@gmail.com
相關文章: