利用 mb_strwidth 取代 mb_strlen 計算 Multi-byte 字數

之前寫了一篇如何切割中文標題,裡面計算中文字數,這樣才不會直接切到中文字,但是 PHP 有很多函式可以算出字串有多少字元,我們看看底下例子,使用了 strlenmb_strlenmb_strwidth 分別下去測試,看看會把中文字算成幾個字元:

";
# 輸出 9
echo mb_strlen("測試ABC", 'UTF-8') . "


"; # 輸出 5 echo mb_strwidth("測試ABC") . "
"; #輸出 7 ?>
看到這結果並不意外,大家可以看到 strlen 把中文字元算成3個字元,mb\_strlen 不管是中文還是英文就都算成單一字元,mb\_strwidth 則是把中文算成 2 字元,mb_strwidth 算出來正是我想要的,如果是想要在 Web 上面切割中文,建議大家用

mb_substr 即可。因為作者本人在弄跟 BBS 相關技術,所以必須江中文字算成2字元,底下節錄 mb_strwidth 如何算字元長度:

Chars	  => Width
U+0000 - U+0019	=> 0
U+0020 - U+1FFF	=> 1
U+2000 - U+FF60	=> 2
U+FF61 - U+FF9F	=> 1
U+FFA0 -	=> 2
PS: 測試環境 PHP 5.2.6
php 

See also