国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

編寫PHP程序檢查字符串中的中文字符個數(shù)的實例分享

2024-05-04 23:44:11
字體:
供稿:網(wǎng)友
這篇文章主要介紹了編寫PHP程序檢查字符串中的中文字符個數(shù)的實例分享,文中利用了PHP中mb_strlen函數(shù)的實現(xiàn)原理,需要的朋友可以參考下
 

有時候我們需要計算一個字符串中包含的字?jǐn)?shù),對于純英文字符串,字?jǐn)?shù)等于字符串長度,用
strlen函數(shù)即可獲得,但如果字符串中包含中文怎辦?mb_strlen可以實現(xiàn),但不幸沒裝擴(kuò)展,那就自己實現(xiàn)一下吧。

php有一個擴(kuò)展一般是必裝的,我們可以使用mb_strlen來獲取字符串中的字?jǐn)?shù),用法一般如下:

$len = mb_strlen("你是我的小蘋果","utf-8");


如愿獲得字符串長度:7.

如果沒裝mb擴(kuò)展呢?自己實現(xiàn)一下吧。

我們要先明白一個事實:字符串是由字符組成的,而字符是由字節(jié)表示的,每個英文字符是一個字節(jié),對應(yīng)一個ascii碼,英文字符的ascii碼是小于128的,也就是十六進(jìn)制的 0x80 .當(dāng)一個字節(jié)的ascii碼超過了127,那就說明當(dāng)前字節(jié)不是一個完整的字符。

比如

$str = "你是我的小蘋果";

中的$str{0}可以取到第一個字節(jié),我們來看一下它是啥:

php > $str = "你是我的小蘋果";php > echo $str{0};?

是個亂碼,它只是

復(fù)制代碼代碼如下:
        
字的字節(jié)之一,也就是說,
復(fù)制代碼代碼如下:

這個字符是由超過一個字節(jié)組成的,我們這樣試試:

 

php > echo $str{0}.$str{1}.$str{2};


可以看到,將三個字節(jié)連在一起輸出,就成了一個完整的

復(fù)制代碼代碼如下:

 

至于這里為什么是三個字節(jié),而不是兩個或4個?這個取決于字符串的編碼,我這里控制臺默認(rèn)是utf8編碼的,在PHP中,一個utf8字符是用三個字節(jié)表達(dá)的,如果是gbk編碼,則會是兩個字節(jié)。至于編碼和字節(jié)的關(guān)系,這個話題比較大,一篇說不完,請參考這篇文章:字符編碼筆記:ascii,unicode和utf8 。

知道了這些,我們就可以自己編寫一個字?jǐn)?shù)檢查的函數(shù)了,大致流程如下:

1.for循環(huán)遍歷字節(jié) 2.判斷字節(jié)編碼是否 >= 0x80,是的話跳過N個字節(jié)

我寫了個簡單的函數(shù),可以判斷gbk或utf8字符串的長度,僅供參考:

<?phpfunction 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++;    //如果字節(jié)碼大于127,則根據(jù)編碼跳幾個字節(jié)    if (ord($str{$i}) >= 0x80) {      $i = $i + $step - 1;//之所以減去1,因為for循環(huán)本身還要$i++    }  }  return $count;}echo mbstrlen(iconv("utf-8","gbk","你是我的小蘋果"),"gbk");echo mbstrlen("你是我的小蘋果");


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 阳高县| 利川市| 犍为县| 赞皇县| 丹凤县| 马龙县| 盐源县| 黄冈市| 潍坊市| 杭州市| 湄潭县| 蓝田县| 桂平市| 桐柏县| 句容市| 清丰县| 延安市| 宜黄县| 夹江县| 阿合奇县| 河东区| 宣化县| 邢台县| 南安市| 兰溪市| 长葛市| 星座| 滁州市| 缙云县| 成都市| 台北市| 贡嘎县| 积石山| 景德镇市| 南阳市| 弥勒县| 阿拉善左旗| 游戏| 安福县| 黄龙县| 大庆市|