Wabow Information Inc. Blog
分類: 技術分享 作者: suzy
13 8 月 2009今天想要分享的是 中文字 全型轉半型的 function!
之前的做法很土法鍊鋼, 就是笨笨地用取代(str_replace)的方式把所有全型字一一換成半型字, 但是客戶經常回報, 某些特定字會造成亂碼, 像是 '中央北路' and '郭郭' 等.... 造成了許多困擾.
因此上網搜尋了一下, 且找到了一個真正的解決方法.......
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | function fullToHalf($str, $encode='Big5') { if ($encode != 'UTF8') { $str = mb_convert_encoding($str, 'UTF-8', $encode); } $ret=''; for ($i=0; $i < strlen($str); $i++) { $s1 = $str[$i]; // 判斷 $c 第八位是否為 1 (漢字) if( ($c=ord($s1)) & 0x80 ) { $s2 = $str[++$i]; $s3 = $str[++$i]; $c = (($c & 0xF) << 12) | ((ord($s2) & 0x3F) << 6) | (ord($s3) & 0x3F); if ($c == 12288) { $ret .= ' '; } elseif ($c > 65280 && $c < 65375) { $c -= 65248; $ret .= chr($c); } else { $ret .= $s1 . $s2 . $s3; } } else { $ret .= $str[$i]; } } return ($encode== 'UTF-8' ? $ret : mb_convert_encoding($ret, $encode, 'UTF-8')); } |
研究了一下寫法, 複習了一下 Bitwise Operators (位元運算)
這個function還真好用阿 XD, 又可順便複習一下 Bitwise, 雖然我們很少用到, 但它其實還有很多活用空間唷.
這個部落格分享了哇寶在電子商務領域的技術及資訊,希望能讓更多人一起為台灣的網路產業加油。