編寫PHP程序檢查字符串中的中文字符個數(shù)的實(shí)例分享
有時候我們需要計(jì)算一個字符串中包含的字?jǐn)?shù),對于純英文字符串,字?jǐn)?shù)等于字符串長度,用
strlen函數(shù)即可獲得,但如果字符串中包含中文怎辦?mb_strlen可以實(shí)現(xiàn),但不幸沒裝擴(kuò)展,那就自己實(shí)現(xiàn)一下吧。
php有一個擴(kuò)展一般是必裝的,我們可以使用mb_strlen來獲取字符串中的字?jǐn)?shù),用法一般如下:
$len = mb_strlen("你是我的小蘋果","utf-8");
如愿獲得字符串長度:7.
如果沒裝mb擴(kuò)展呢?自己實(shí)現(xiàn)一下吧。
我們要先明白一個事實(shí):字符串是由字符組成的,而字符是由字節(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}; �
是個亂碼,它只是
字的字節(jié)之一,也就是說,
這個字符是由超過一個字節(jié)組成的,我們這樣試試:
php > echo $str{0}.$str{1}.$str{2};
你
可以看到,將三個字節(jié)連在一起輸出,就成了一個完整的
。
至于這里為什么是三個字節(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字符串的長度,僅供參考:
<?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++; //如果字節(jié)碼大于127,則根據(jù)編碼跳幾個字節(jié) if (ord($str{$i}) >= 0x80) { $i = $i + $step - 1;//之所以減去1,因?yàn)閒or循環(huán)本身還要$i++ } } return $count; } echo mbstrlen(iconv("utf-8","gbk","你是我的小蘋果"),"gbk"); echo mbstrlen("你是我的小蘋果");
- php阿拉伯?dāng)?shù)字轉(zhuǎn)中文人民幣大寫
- php封裝好的人民幣數(shù)值轉(zhuǎn)中文大寫類
- php實(shí)現(xiàn)過濾字符串中的中文和數(shù)字實(shí)例
- php將金額數(shù)字轉(zhuǎn)化為中文大寫
- php支持中文字符串分割的函數(shù)
- php的GD庫imagettftext函數(shù)解決中文亂碼問題
- 多個PHP中文字符串截取函數(shù)
- PHP中文處理 中文字符串截取(mb_substr)和獲取中文字符串字?jǐn)?shù)
- php中計(jì)算中文字符串長度、截取中文字符串的函數(shù)代碼
- php簡單統(tǒng)計(jì)在線人數(shù)的方法
- PHP使用redis實(shí)現(xiàn)統(tǒng)計(jì)緩存mysql壓力的方法
- php精確的統(tǒng)計(jì)在線人數(shù)的方法
- php簡單統(tǒng)計(jì)中文個數(shù)的方法
相關(guān)文章
laravel 框架實(shí)現(xiàn)無限級分類的方法示例
這篇文章主要介紹了laravel 框架實(shí)現(xiàn)無限級分類的方法,結(jié)合實(shí)例形式分析了Laravel框架基于遞歸遍歷實(shí)現(xiàn)無限極分類輸出的相關(guān)控制器及視圖操作技巧,需要的朋友可以參考下2019-10-10PHP實(shí)現(xiàn)登錄注冊之BootStrap表單功能
登錄與注冊是我們在web開發(fā)中最常見的模塊,也是我們?nèi)粘I钪薪?jīng)常接觸的功能。下面通過本文給大家分享PHP實(shí)現(xiàn)登錄注冊之BootStrap表單功能,需要的朋友參考下吧2017-09-09SQL注入寬字節(jié)注入由淺到深學(xué)習(xí)
這篇文章主要為大家介紹了SQL注入寬字節(jié)注入由淺到深學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02phpstorm配置php運(yùn)行環(huán)境的詳細(xì)步驟
這篇文章主要介紹了phpstorm配置php運(yùn)行環(huán)境的詳細(xì)步驟,首先安裝phpstrom,按照提示的步驟一步一步來就行,文中給大家介紹了phpstorm的簡單配置,需要的朋友可以參考下2023-09-09laravel-admin 管理平臺獲取當(dāng)前登陸用戶信息的例子
今天小編就為大家分享一篇laravel-admin 管理平臺獲取當(dāng)前登陸用戶信息的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10PHP利用超級全局變量$_GET來接收表單數(shù)據(jù)的實(shí)例
下面小編就為大家?guī)硪黄狿HP利用超級全局變量$_GET來接收表單數(shù)據(jù)的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11