字體:小 中 大 | |
|
|
2010/01/15 17:09:33瀏覽12919|回應0|推薦1 | |
基本上現在許多網站、論壇、Blog等等,大都已經使用UTF-8編碼,因為現在的作業系統,例如XP,已經可能打出繁體中文字碼(BIG5)與非繁體中文字碼的中文字(Unicode), 但很多人在打中文字時,因為不容易辨別,很容易用到Unicode的中文字, 如果在BIG5編碼的網頁上顯示,就會成為亂碼,存入BIG5編碼的資料庫內, 也會變成亂碼。 網路無國界,你的網站可能會有人輸入繁體中文、Unicode中文、簡體中文等, 如果像早期,那就網站看起來很多亂碼,很討厭,如果讓不同語言文字共存, 就是用UTF-8編碼,也解決中文字衝碼的問題。 但是有些時候還是會用到繁體中文編碼,所以要把UTF-8轉為BIG5, 一般我們使用的函數就是PHP內建的iconv(),不過如果被轉換內容裡面有特殊符號, 那麼轉換後,那個特殊符號後面的內容都會不見,如何能全部轉出來, 這裡用到iconv()內建的幾個參數。 用法:iconv ( string $in_charset , $out_charset , $str ) $in_charset 原來的編碼 $out_charset 要轉的編碼 $str 要被轉換的字串 範例: $string = "ABBĀSĀBĀD"; echo iconv('UTF-8', 'BIG5//TRANSLIT', $string); // 輸出: ABBASABAD echo iconv('UTF-8', 'BIG5//IGNORE', $string); // 輸出: ABBSBD echo iconv('UTF-8', 'BIG5//TRANSLIT//IGNORE', $string); // 輸出: 無 使用的方式有如上三種 //TRANSLIT //IGNORE //TRANSLIT//IGNORE 如果在第二個參數後面加上/ / TRANSLIT。 這意味著,當一個被轉換的字符不在被轉換的編碼裡面,則用一個或幾個類似的字符替代。 如果加上//IGNORE,當一個被轉換的字符不在被轉換的編碼裡面,就直接去掉。 大家可以自己用一小段含有Unicode的中文字串去測試,就會比較了解了。 另外特別提到一點,這是我碰過,花了一個多小時快變光頭時, 才找到的問題,在這邊分享經驗,希望後人遇到時不會像我一樣。 全型空格字元,大家都知道吧,可是你們不知道全型空格字元竟然有二種, 我跟大家一樣,原先以為只有一種,因為一般我們打全型空格字元, 真的就只是一種而已,可是我碰到二種,另一種我也不知道人家是怎麼打出來的, 在文字檔裡面,你看到的就是全型空格,沒有區分,這邊注意, UTF-8編碼字串裡面如果有全型空格,在轉成BIG5碼時,在它後面的內容都會被截斷, 如果你用//IGNORE,那麼後面雖然都可以轉出來,但全型空格之後某一部分文字會變亂碼 所以我先用str_replace()函數把全型空格轉為HTML的十進制記號, 就是(?),這樣子就可以保留全型空格,但我只替換一部分的全型空格, 有一部分並沒有替換,我就是卡在這裡,測試來測試去,怎麼也想不通, 最後我用COPY的,把原檔案裡面轉換成功與未轉換成功的全型空格, COPY到PHP程式裡,第一個參數可以使用陣列,如下: $ary_key=array('?','?'); $contents = str_replace($ary_key,'?', $contents); 結果全部都轉換了,真怪,問題一定出在全型空格,打死我都不相信, 那二個有什麼不一樣,看上去都是全型空格,所以我用可以看Hex碼(即ASCII碼)的軟體,如Ultra Edit,把那二個空格貼上去,然後再切換成Hex碼介面, 哇~見鬼,真的不一樣,一個是84 AA,另一個是84 AB, 但是表現出來的都是全型空格,媽呀~真是太勁爆了 為了找出這個問題,我腦細胞不知道陣亡多少個....... 我猜測,或許在TXT文字檔裡面打的全型空白字元,與在WORD檔裡面打的全型空白字元, 其內碼是不一樣的,猜測....,所以我在TXT裡面打個全型空白字元,貼到Ultra Edit, 然後在WORD裡面也打個全型空白字元,貼到Ultra Edit,結果二個的內碼一樣, 但竟然是A1 40,媽呀~我不玩了,怎麼又多一種出來....... 然後我在Ultra Edit裡面打個空白字元,內碼也是A1 40, 所以A1 40的空白字元,才是我們在XP作業系統下會打出來的空白字元, 那我原先那個是怎麼打出來的?不想了,想破頭也沒用,全部加進去轉換吧... 註:上面的 $ary_key=array('?','?'); ,裡面應該是全型空白字元, 但是張貼出去後,變成問號,表示那二個空白字元應該是比較特別的
|
|
( 興趣嗜好|電腦3C ) |