您好,登錄后才能下訂單哦!
小編給大家分享一下php自定義函數(shù)如何實(shí)現(xiàn)統(tǒng)計(jì)中文字符串長度,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
具體如下:
中文字符計(jì)算為2個(gè)字符 英文字符計(jì)算為1個(gè)
代碼
/** * 可以統(tǒng)計(jì)中文字符串長度的函數(shù) * */ function abslength($str) { $len=strlen($str); $i=0; while($i<$len) { if(preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str[$i])) { $i+=2; } else { $i+=1; } } return $i; }
另:php判斷字符長度:中文,英文,數(shù)字。
這個(gè)方法很多。 記錄一個(gè)簡單的。
mb_strlen($str, 'GBK');
缺點(diǎn)是要安裝mb庫。
不過這個(gè)還是有部分問題待解決。
GB碼編碼規(guī)則是這樣的:每個(gè)漢字由兩個(gè)字節(jié)構(gòu)成,第一個(gè)字節(jié)的范圍從0XA1-0XFE,共96種。第二個(gè)字節(jié)的范圍分別為0XA1-0XFE,共96種。利用這兩個(gè)字節(jié)共可定義出 96 * 96=8836種漢字。實(shí)際共有6763個(gè)漢字。
BIG5碼編碼規(guī)則是這樣的:每個(gè)漢字由兩個(gè)字節(jié)構(gòu)成,第一個(gè)字節(jié)的范圍從0X81-0XFE,共126種。第二個(gè)字節(jié)的范圍分別為0X40-0X7E,0XA1-0XFE,共157種。也就是說,利用這兩個(gè)字節(jié)共可定義出 126 * 157=19782種漢字。這些漢字的一部分是我們常用到的,如一、丁,這些字我們稱為常用字,其BIG5碼的范圍為0XA440-0XC671,共5401個(gè)。較不常用的字,如濫、調(diào),我們稱為次常用字,范圍為 0XC940-0XF9FE,共7652個(gè),剩下的便是一些特殊字符。
安全點(diǎn)的方法。
function StrLenW($str) { $count = 0; $len = strlen($str); for($i=0; $i<$len; $i++,$count++) if(ord($str[$i])>=128) $i++; return $count; }
最后,下面這個(gè)才是正確的,通用的!
代碼:
/**作用:統(tǒng)計(jì)字符長度包括中文、英文、數(shù)字 * 參數(shù):需要進(jìn)行統(tǒng)計(jì)的字符串、編碼格式目前系統(tǒng)統(tǒng)一使用UTF-8 * 修改記錄: $str = "kds"; echo sstrlen($str,'utf-8'); * */ function sstrlen($str,$charset) { $n = 0; $p = 0; $c = ''; $len = strlen($str); if($charset == 'utf-8') { for($i = 0; $i < $len; $i++) { $c = ord($str{$i}); if($c > 252) { $p = 5; } elseif($c > 248) { $p = 4; } elseif($c > 240) { $p = 3; } elseif($c > 224) { $p = 2; } elseif($c > 192) { $p = 1; } else { $p = 0; } $i+=$p;$n++; } } else { for($i = 0; $i < $len; $i++) { $c = ord($str{$i}); if($c > 127) { $p = 1; } else { $p = 0; } $i+=$p;$n++; } } return $n; }
以上是“php自定義函數(shù)如何實(shí)現(xiàn)統(tǒng)計(jì)中文字符串長度”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。