一般若是沒裝 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
2005-12-03
PHP 在 Big-5 裡處理中文字串切割
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言