色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

php mb strlen

洪振霞1年前7瀏覽0評論

今天我來和大家聊一下php中的mb_strlen函數(shù)。在我們的web開發(fā)中,我們經(jīng)常會(huì)處理字符串的長度問題,如果是單字節(jié)字符,可以直接使用php自帶的strlen函數(shù),但是如果是多字節(jié)字符(比如中文),則需要使用mb_strlen函數(shù)。

舉個(gè)例子,如果我們要統(tǒng)計(jì)一個(gè)字符串中字符的個(gè)數(shù),如果使用strlen函數(shù),會(huì)出現(xiàn)中英文字符算一個(gè)字符的情況,如下代碼所示:

$string = "Hello 世界";
echo strlen($string); //輸出12

可以看到,使用strlen函數(shù)計(jì)算出的字符串長度是12個(gè)字符,而實(shí)際上中文字符應(yīng)該算兩個(gè)字符。如果我們使用mb_strlen函數(shù),代碼如下:

$string = "Hello 世界";
echo mb_strlen($string, 'utf-8'); //輸出8

可以看到,使用mb_strlen函數(shù)計(jì)算出的字符串長度是8個(gè)字符,正是我們想要的結(jié)果。

那么為什么要使用mb_strlen函數(shù)呢?因?yàn)樵趗tf-8編碼中,一個(gè)中文字符由3個(gè)字節(jié)表示,而它所對應(yīng)的unicode碼只有一個(gè),因此使用strlen函數(shù)計(jì)算中文字符的長度時(shí)會(huì)出現(xiàn)錯(cuò)誤的結(jié)果。

如果我們想統(tǒng)計(jì)字符串中某個(gè)子串出現(xiàn)的次數(shù),同樣需要使用mb_strlen函數(shù)。比如我們要統(tǒng)計(jì)"世界"這個(gè)子串在上面的$string變量中出現(xiàn)的次數(shù),我們可以這么做:

$string = "Hello 世界,Hello 世界";
$sub_str = "世界";
$count = 0;
$offset = 0;
while (($pos = mb_strpos($string, $sub_str, $offset, 'utf-8')) !== false) {
$offset = $pos + mb_strlen($sub_str, 'utf-8');
$count++;
}
echo $count; //輸出2

可以看到,我們使用mb_strpos函數(shù)來查找子串在字符串中的位置,并且在第四個(gè)參數(shù)上指定編碼為utf-8。在計(jì)算子串長度時(shí)同樣使用mb_strlen函數(shù),這樣可以確保中文字符不會(huì)被誤算。

總結(jié)一下,如果我們的字符串中包含了中文字符或其他多字節(jié)字符,需要計(jì)算字符串長度或者統(tǒng)計(jì)子串出現(xiàn)次數(shù)時(shí),就需要使用mb_strlen函數(shù)。