PHP 中如何正確統計中文字數
PHP中如何正確統計中文字數?這個是困擾我很久的問題,PHP中有很多函數可以計算字符串的長度,比如下面的例子,分別使用了strlen
,mb_strlen
,mb_strwidth
這個三個函數去測試統計字符串的長度,看看把中文算成幾個字節:
echo strlen("你好ABC") . "";
# 输出 9
echo mb_strlen("你好ABC", 'UTF-8') . "";
# 输出 5
echo mb_strwidth("你好ABC") . "";
#输出 7
從上面的測試,我們可以看出:strlen
把中文字符算成3個字節,mb_strlen
不管中文還是英文,都算1個字節,而mb_strwidth
則把中文算成2個字節,所以mb_strwidth
才是我們想要的:中文2個字節,英文1個字節。
同樣截取字符串也建議使用mb_strimwidth
,也是按照中文2個字節,英文1個字節方式計算之後的,並且如果字數超過截取的要求,這個函數還可以在最後面自動添加’…’。
mb_strimwidth($post_excerpt,0,240,'...','utf-8');
注意,最後添加’utf-8’編碼參數,可以避免中文截取亂碼的問題。