編寫PHP程式檢查字串中的中文字元個數的例項分享

2022-09-29 05:12:10 字數 1493 閱讀 7701

有時候我們需要計算乙個字串中包含的字數,對於純英文本串,字數等於字串長度,用

strlen函式即可獲得,但如果字串中包含中文怎辦?mb_strlen可以實現,但不幸沒裝擴充套件,那就自己實現一下吧。

php有乙個擴充套件一般是必裝的,我們可以使用mb_strlen來獲取字串中的字數,用法一般如下:

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

如願獲得字串長度:7.

如果沒裝mb擴充套件呢?自己實現一下吧。

我們要先明白乙個www.cppcns.com事實:字串是由字www.cppcns.com符組成的,而字元是由位元組表示的,每個英文本元是乙個位元組,對應乙個ascii碼,英文本元的ascii碼是小於128的,也就是十六進製制的 0x80 .當乙個位元組的ascii碼超過了127,那就說明當前位元組不是乙個完整的字元。

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

中的$str可以取到第乙個位元組,我們來看一下它是啥:

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

php > echo $str;

�是個亂碼,它只是

複製** **如下:

你       

字的位元組之一,也就是說,

複製** **如下:

你這個字元是由超過乙個位元組組成的,我們這樣試試:

php > echo $str.$str.$str;

你可以看到,將三個位元組連在一起輸出,就成了乙個完整的

複製** **如下:你。

至於這裡為什麼是三個位元組,而不是兩個或4個?這個取決於字串的編碼,我這裡控制台預設是utf8編碼的,在php中,乙個utf8字元是用三個位元組表達的,如果是gbk編碼,則會是兩個位元組。至於編碼和位元組的關係,這個話題比較大,一篇說不完,請參考這篇文章:字元編碼筆記:ascii,unicode和utf8 。

知道了這些,我們就可以自己編寫乙個字數檢查的函式了,大致流程如下:

1.for迴圈遍歷位元組 2.判斷位元組編碼是否 >= 0x80,是的話跳過n個位元組

我寫了個簡單的函式,可以判斷gbk或utf8字串的長度,僅供參考:

www.cppcns.com<?php function mbstrlen($str,$encoding="utf8")

$encoding = strtolower($encoding);

if ($encoding == "utf8" or $encoding == "utf-8") elseif ($encoding == "gbk" or $encoding == "gb2312") else

程式設計客棧 $count = 0;

for ($i=0; $i= 0x80)

} return $count;

}echo mbstrlen(iconv("utf-8","gbk","你是我的小蘋果"),"gbk");

echo mbstrlen("你是我的小蘋果");

本文標題: 編寫php程式檢查字串中的中文字元個數的例項分享

本文位址:

檢查字串中的結束標記

使用的模組為itertools,在其中主要使用的方法是itertools.imap function,iter1,iter2.itern 此方法的主要就是返回乙個迭代器,其中返回的項為function iter1,iter2,itern 返回的長度主要看最短的iter的長度,如果function為n...

檢查字串是否相等

在j a中可以使用 equals 方法判斷兩個字串是否相等。s.equals t 如果字串s與字串t相等,則返回true 否則,返回false。想要檢測兩個字串是否相等,而不區分大小寫,可以使用equalsignorecase方法 hello equalsignorecase hello 一定不要使...

jquery如何檢查字串中是否包含指定字元?

方法 使用indexof 或lastindexof 來檢查,它們都可返回指定字元在字串中的位置,如果字串不包含指定字元,則返回 1 因此只需判斷返回值是否大於等於即可,例 if 字串.indexof 字元 0 相關推薦 jquery 教程 方法一 使用indexof 和lastindexof 方法 ...