- //逐字轉換utf8字串為big5
- function utf8_2_big5($utf8_str) {
- $i=0;
- $len = strlen($utf8_str);
- $big5_str="";
- for ($i=0;$i<$len;$i++) {
- $sbit = ord(substr($utf8_str,$i,1));
- if ($sbit < 128) {
- $big5_str.=substr($utf8_str,$i,1);
- } else if($sbit > 191 && $sbit < 224) {
- $new_word=iconv("UTF-8","Big5",substr($utf8_str,$i,2));
- $big5_str.=($new_word=="")?"■":$new_word;
- $i++;
- } else if($sbit > 223 && $sbit < 240) {
- $new_word=iconv("UTF-8","Big5",substr($utf8_str,$i,3));
- $big5_str.=($new_word=="")?"■":$new_word;
- $i+=2;
- } else if($sbit > 239 && $sbit < 248) {
- $new_word=iconv("UTF-8","Big5",substr($utf8_str,$i,4));
- $big5_str.=($new_word=="")?"■":$new_word;
- $i+=3;
- }
- }
- return $big5_str;
复制代码 產生測試資料
為了測試到 big5 碼的每一個字元,所以必須寫一個程式產生 big5 碼的每一個字元。下列表格為 big5 碼的編碼範圍(參考倚天中文系統手冊),總共是 19,782 個字元。但其中包含了 63 個控制碼及 5809 個使用者造字碼,必須扣除,所以實際的字碼共有 13910 個字元。
BIG5 碼的範圍: (計 19,782 個)
高位元組: A1~FE, 8E~A0, 81~8D (計 126 個)
低位元組: 40~7E, A1~FE (計 157 個)
控制碼的範圍: (計 63 個)
控制碼: A3C0~A3E0 (計 33 個)
保留之控制碼: A3E1~A3FE (計 30 個)
使用者造字(USRFONT):(計 5,809 個)
第一段: FA40~FEFE (計 785 個)
第二段: 8E40~A0FE (計 2,983 個)
第三段: 8140~8DFE (計 2,041 個)
|