PHP字串學習之如何返回漢字或混合字元的長度

yesye發表於2021-09-11
在之前的文章《》中,我們介紹了字串替換,將某長度的子串換成*號的方法,這次我們繼續瞭解字串,介紹一下計算中文字串長度,或者中英文混合字串長度的方法。

如何計算中文字串長度?對於這個問題,我們可能第一反應就是使用strlen()函式,但strlen()函式處理全英文字串還是不錯的,但當了中英文混合或純中文的字串中,就不行了。我們看看下面的例子:

<?php
header("Content-type:text/html;charset=utf-8");  //設定字元編碼為utf-8
$str = "歡迎來到PHP中文網!";
echo '字串 “'.$str.'” 的長度為:'.strlen($str).'<br>';
?>

輸出結果為:

0.png

可以看出,strlen()函式因為處理字元的規則不同,無法準確的返回中英文混合或純中文字串的長度。那麼為什麼會返回27呢?

那是因為我們採用的字元編碼為utf-8,在UTF-8 編碼下一個中文字元佔三個位元組。

strlen()函式在ASCII碼下,一箇中文漢字佔兩個位元組的空間;在UTF-8編碼下,一箇中文(含繁體)等於三個位元組;在Unicode編碼下,一箇中文(含繁體)等於兩個位元組。

而上例中的字串“歡迎來到PHP中文網!”中一個包含了8箇中文字元,3個英文字元,則8*3+3=27個位元組,則字串長度為27。

但這樣的字串長度不是我們想要的,那樣如何處理中文字元,可以準確的計算出我們想要的中英文混合或純中文字串的長度呢?

PHP提供了一個函式來解決這個問題,那就是mb_strlen() 函式

還是上個示例,這次使用mb_strlen() 函式來計算字串長度:

<?php
header("Content-type:text/html;charset=utf-8");
$str = "歡迎來到PHP中文網!";
echo '字串 “'.$str.'” 的長度為:'.mb_strlen($str,'utf-8').'<br>';
?>

輸出結果為:

1.png

可以看出:字串$str中,中文+英文+感嘆號,一個有11個字元,輸出結果也為11。對了,找到對的人了~

mb_strlen() 函式中無論是漢字,還是英文、數字、小數點、下劃線和空格,都只佔一個位元組。

下面我們來簡單瞭解一下mb_strlen() 函式。

mb_strlen($string,$encoding)函式可以透過設定字元編碼從而返回對應的字元數;該函式接受一個必需引數$string(需要檢測的字串)和一個可省略的引數$encoding(字元編碼),如果省略則使用內部字元編碼。

我們可以透過設定對應的$encoding引數,就能很好的處理中文字串的長度問題。

好了就說到這裡了,有其他想知道的,可以點選這個哦。→ →

最後給大家推薦閱讀一個經典課程《》,免費的~快來學習啊!

以上就是PHP字串學習之如何返回漢字或混合字元的長度的詳細內容,更多請關注php中文網其它相關文章!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2041/viewspace-2827537/,如需轉載,請註明出處,否則將追究法律責任。

相關文章