在先前的文章《PHP怎麼將某長度的子字串換成*號》中,我們介紹了字串替換,將某長度的子字串換成*號的方法,這次我們繼續了解字串,介紹一下計算中文字串長度,或是中英文混合字串長度的方法。
如何計算中文字串長度?對於這個問題,我們可能第一個反應就是使用strlen()函數,但strlen()函數處理全英文字串還是不錯的,但當了中英文混合或純中文的字串中,就不行了。我們來看看下面的範例:
<?php header("Content-type:text/html;charset=utf-8"); //设置字符编码为utf-8 $str = "欢迎来到PHP中文网!"; echo '字符串 “'.$str.'” 的长度为:'.strlen($str).'<br>'; ?>
輸出結果為:
可以看出,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>'; ?>
輸出結果為:
$str中,中文英文感嘆號,一個有11個字符,輸出結果也為11。對了,找到對的人了~
mb_strlen() 函數中無論是漢字,還是英文、數字、小數點、底線和空格,都只佔一個位元組。下面我們來簡單了解一下mb_strlen() 函數。
mb_strlen($string,$encoding)函數可以透過設定字元編碼從而傳回對應的字元數;該函數接受一個必需參數$string(需要偵測的字串)和一個可省略的參數
$encoding(字元編碼),如果省略則使用內部字元編碼。
$encoding參數,就能很好的處理中文字串的長度問題。
PHP字串處理(玉女心經版)》,免費的~快來學習啊!
以上是PHP字串學習如何傳回漢字或混合字元的長度的詳細內容。更多資訊請關注PHP中文網其他相關文章!