《PHP教程:編寫PHP程序檢查字符串中的中文字符個(gè)數(shù)的實(shí)例分享》要點(diǎn):
本文介紹了PHP教程:編寫PHP程序檢查字符串中的中文字符個(gè)數(shù)的實(shí)例分享,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
PHP實(shí)戰(zhàn)有時(shí)候我們需要計(jì)算一個(gè)字符串中包括的字?jǐn)?shù),對(duì)于純英文字符串,字?jǐn)?shù)等于字符串長(zhǎng)度,用
strlen函數(shù)即可獲得,但如果字符串中包括中文怎辦?mb_strlen可以實(shí)現(xiàn),但不幸沒裝擴(kuò)展,那就自己實(shí)現(xiàn)一下吧.
PHP實(shí)戰(zhàn)php有一個(gè)擴(kuò)展一般是必裝的,我們可以使用mb_strlen來獲取字符串中的字?jǐn)?shù),用法一般如下:
PHP實(shí)戰(zhàn)
$len = mb_strlen("你是我的小蘋果","utf-8");
PHP實(shí)戰(zhàn)
如愿獲得字符串長(zhǎng)度:7.
PHP實(shí)戰(zhàn)如果沒裝mb擴(kuò)展呢?本身實(shí)現(xiàn)一下吧.
PHP實(shí)戰(zhàn)我們要先明白一個(gè)事實(shí):字符串是由字符組成的,而字符是由字節(jié)表示的,每個(gè)英文字符是一個(gè)字節(jié),對(duì)應(yīng)一個(gè)ascii碼,英文字符的ascii碼是小于128的,也就是十六進(jìn)制的 0x80 .當(dāng)一個(gè)字節(jié)的ascii碼超過了127,那就說明當(dāng)前字節(jié)不是一個(gè)完整的字符.
PHP實(shí)戰(zhàn)比如
PHP實(shí)戰(zhàn)
$str = "你是我的小蘋果";
PHP實(shí)戰(zhàn)中的$str{0}可以取到第一個(gè)字節(jié),我們來看一下它是啥:
PHP實(shí)戰(zhàn)
php > $str = "你是我的小蘋果";
php > echo $str{0};
?
PHP實(shí)戰(zhàn)是個(gè)亂碼,它只是
PHP實(shí)戰(zhàn)
php > echo $str{0}.$str{1}.$str{2};
PHP實(shí)戰(zhàn)你
可以看到,將三個(gè)字節(jié)連在一起輸出,就成了一個(gè)完整的
PHP實(shí)戰(zhàn)至于這里為什么是三個(gè)字節(jié),而不是兩個(gè)或4個(gè)?這個(gè)取決于字符串的編碼,我這里控制臺(tái)默認(rèn)是utf8編碼的,在PHP中,一個(gè)utf8字符是用三個(gè)字節(jié)表達(dá)的,如果是gbk編碼,則會(huì)是兩個(gè)字節(jié).至于編碼和字節(jié)的關(guān)系,這個(gè)話題比較大,一篇說不完,請(qǐng)參考這篇文章:字符編碼筆記:ascii,unicode和utf8 .
PHP實(shí)戰(zhàn)知道了這些,我們就可以本身編寫一個(gè)字?jǐn)?shù)檢查的函數(shù)了,大致流程如下:
PHP實(shí)戰(zhàn)1.for循環(huán)遍歷字節(jié) 2.判斷字節(jié)編碼是否 >= 0x80,是的話跳過N個(gè)字節(jié)
PHP實(shí)戰(zhàn)我寫了個(gè)簡(jiǎn)單的函數(shù),可以判斷gbk或utf8字符串的長(zhǎng)度,僅供參考:
PHP實(shí)戰(zhàn)
<?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ù)編碼跳幾個(gè)字節(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培訓(xùn)學(xué)院每天發(fā)布《PHP教程:編寫PHP程序檢查字符串中的中文字符個(gè)數(shù)的實(shí)例分享》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/7318.html