首頁 >後端開發 >PHP問題 >PHP字串學習如何傳回漢字或混合字元的長度

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

青灯夜游
青灯夜游原創
2021-08-09 17:28:502164瀏覽

在先前的文章《PHP怎麼將某長度的子字串換成*號》中,我們介紹了字串替換,將某長度的子字串換成*號的方法,這次我們繼續了解字串,介紹一下計算中文字串長度,或是中英文混合字串長度的方法。

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

<?php
header("Content-type:text/html;charset=utf-8");  //设置字符编码为utf-8
$str = "欢迎来到PHP中文网!";
echo &#39;字符串 “&#39;.$str.&#39;” 的长度为:&#39;.strlen($str).&#39;<br>&#39;;
?>

輸出結果為:

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

可以看出,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 &#39;字符串 “&#39;.$str.&#39;” 的长度为:&#39;.mb_strlen($str,&#39;utf-8&#39;).&#39;<br>&#39;;
?>

輸出結果為:

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

##可以看出:在字串

$str中,中文英文感嘆號,一個有11個字符,輸出結果也為11。對了,找到對的人了~

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

下面我們來簡單了解一下mb_strlen() 函數。

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

我們可以透過設定對應的

$encoding參數,就能很好的處理中文字串的長度問題。

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

php影片教學

 最後給大家推薦閱讀一個經典課程《

PHP字串處理(玉女心經版)》,免費的~快來學習啊!

以上是PHP字串學習如何傳回漢字或混合字元的長度的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn