2005-12-03

PHP 在 Big-5 裡處理中文字串切割

一般若是沒裝 mbstring 這個 function 的狀況下,直接以 substr 切割,會有最後一碼中文字被切成一半的問題。

這時一樣先做 substr,再把切割過的字串丟進底下的 func,preg_replace 會先把完整的雙byte中文換成空白,然後判斷字串裡是不是還有中文的前一byte(畢竟被切割掉的一定後一byte),沒有的話就傳回原字串,有的話就傳回原字串再 -1 個 byte,以確保切割過的字串不會出現亂碼

function end_big5($src){
$str = preg_replace("/[\xa1-\xf9][\x40-\x7e\xa1-\xfe]/","",$src);
return (preg_match("/[\xa1-\xf9]$/",$str)) ? substr($src,0,-1) : $src;
}

當然以上做法算是治標之道,尤其是 preg_replace 除了有效能上的問題,也有處理雙 byte 編碼設定的問題。

所以最好是裝 mbstring function 組或改用 UTF-8 來解決問題。

PHP 官方站
Multibyte String Functions

沒有留言: