《PHP教程:編寫PHP程序檢查字符串中的中文字符個數的實例分享》要點:
本文介紹了PHP教程:編寫PHP程序檢查字符串中的中文字符個數的實例分享,希望對您有用。如果有疑問,可以聯系我們。
PHP實戰有時候我們需要計算一個字符串中包括的字數,對于純英文字符串,字數等于字符串長度,用
strlen函數即可獲得,但如果字符串中包括中文怎辦?mb_strlen可以實現,但不幸沒裝擴展,那就自己實現一下吧.
PHP實戰php有一個擴展一般是必裝的,我們可以使用mb_strlen來獲取字符串中的字數,用法一般如下:
PHP實戰
$len = mb_strlen("你是我的小蘋果","utf-8");
PHP實戰
如愿獲得字符串長度:7.
PHP實戰如果沒裝mb擴展呢?本身實現一下吧.
PHP實戰我們要先明白一個事實:字符串是由字符組成的,而字符是由字節表示的,每個英文字符是一個字節,對應一個ascii碼,英文字符的ascii碼是小于128的,也就是十六進制的 0x80 .當一個字節的ascii碼超過了127,那就說明當前字節不是一個完整的字符.
PHP實戰比如
PHP實戰
$str = "你是我的小蘋果";
PHP實戰中的$str{0}可以取到第一個字節,我們來看一下它是啥:
PHP實戰
php > $str = "你是我的小蘋果";
php > echo $str{0};
?
PHP實戰是個亂碼,它只是
PHP實戰
php > echo $str{0}.$str{1}.$str{2};
PHP實戰你
可以看到,將三個字節連在一起輸出,就成了一個完整的
PHP實戰至于這里為什么是三個字節,而不是兩個或4個?這個取決于字符串的編碼,我這里控制臺默認是utf8編碼的,在PHP中,一個utf8字符是用三個字節表達的,如果是gbk編碼,則會是兩個字節.至于編碼和字節的關系,這個話題比較大,一篇說不完,請參考這篇文章:字符編碼筆記:ascii,unicode和utf8 .
PHP實戰知道了這些,我們就可以本身編寫一個字數檢查的函數了,大致流程如下:
PHP實戰1.for循環遍歷字節 2.判斷字節編碼是否 >= 0x80,是的話跳過N個字節
PHP實戰我寫了個簡單的函數,可以判斷gbk或utf8字符串的長度,僅供參考:
PHP實戰
<?php
function mbstrlen($str,$encoding="utf8")
{
if (($len = strlen($str)) == 0) {
return 0;
}
$encoding = strtolower($encoding);
if ($encoding == "utf8" or $encoding == "utf-8") {
$step = 3;
} elseif ($encoding == "gbk" or $encoding == "gb2312") {
$step = 2;
} else {
return false;
}
$count = 0;
for ($i=0; $i<$len; $i++) {
$count++;
//如果字節碼大于127,則根據編碼跳幾個字節
if (ord($str{$i}) >= 0x80) {
$i = $i + $step - 1;//之所以減去1,因為for循環自己還要$i++
}
}
return $count;
}
echo mbstrlen(iconv("utf-8","gbk","你是我的小蘋果"),"gbk");
echo mbstrlen("你是我的小蘋果");
維易PHP培訓學院每天發布《PHP教程:編寫PHP程序檢查字符串中的中文字符個數的實例分享》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。