1. 程式人生 > >計算中英文混合字串長度,中文算兩個字元

計算中英文混合字串長度,中文算兩個字元

獲取中英文字串長度是一個比較常用的功能,比如限制一個使用者暱稱、文章標題等的長度,一般從技術的角度考慮,不同的編碼中文所佔的位元組數不同,但從使用者的角度考慮他們根本不知道什麼是字符集,通常的習慣是一箇中文按兩個英文算。之前在網上看到的一個演算法是:
$strlen = (strlen($str) + mb_strlen($str,"UTF-8")) / 2;
但utf-8是變長的,佔2到4個位元組,顯然這麼算是不準的。後來自己想了個演算法
$temp = preg_replace('/([\x80-\xff]*)/i','',$str);   //去掉字串中的中文
echo (mb_strlen($str)-strlen($temp))*2 + strlen($temp);   //其實就是 中文個數*2+英文個數。

寫完這個忽然又想到個方法,既然GBK編碼中文是固定按2個位元組算,那如果把UTF-8用iconv轉成GBK再去strlen,不就可以直接算出來了嗎?

$text = "啊—1";
$a=iconv("UTF-8", "GBK", $text);
echo strlen($a);

但一直沒有看到有人這麼用,不知道問題在哪。有哪位小夥伴知道,還望指教。