首頁  >  文章  >  後端開發  >  php 中strlen和mb_strlen的差別你知道嗎?

php 中strlen和mb_strlen的差別你知道嗎?

怪我咯
怪我咯原創
2017-07-13 14:48:031654瀏覽

在php中常見的計算字串長度的函數有:strlen和mb_strlen.當字元全是英文字元的時候,兩者是一樣。這裡主要比較一下,中英文混排的時候,兩個計算結果。

在PHP中,strlen與mb_strlen是求字串長度的函數,

strlen() 函數傳回字串的長度,若成功則傳回字串的長度,若字串為空則回0。

mb_strlen — 取得字串的長度,

語法

mb_strlen ($str, $encoding)

str   要檢查長度的字串。

encoding       參數為字元編碼。如果省略,則使用內部字元編碼。

傳回值

傳回具有 encoding 編碼的字串 str 所包含的字元數。 多位元組的字元被計為 1。

如果給定的 encoding 無效則回傳 FALSE。

下面透過例子,講解這兩者之間的差異。

先看範例:

<?php 
//测试时文件的编码方式要是UTF8 
$str=&#39;中文a字1符&#39;; 
echo strlen($str).&#39;<br>&#39;;//14 
echo mb_strlen($str,&#39;utf8&#39;).&#39;<br>&#39;;//6 
echo mb_strlen($str,&#39;gbk&#39;).&#39;<br>&#39;;//8 
echo mb_strlen($str,&#39;gb2312&#39;).&#39;<br>&#39;;//10 
?>

結果分析:在strlen計算時,對待一個UTF8的中文字元是3個長度,所以「中文a字1符」長度是3 *4+2=14,在mb_strlen計算時,選定內碼為UTF8,則會將一個中文字元當作長度1來計算,所以「中文a字1符」長度是6 .

利用這兩個函數則可以聯合計算出一個中英文混排的串的佔位是多少(一個中文字符的佔位是2,英文字符是1)

echo (strlen($str) + mb_strlen($str,&#39;UTF8&#39;)) / 2;

例如“中文a字1符」的strlen($str)值是14,mb_strlen($str)值是6,則可以計算出「中文a字1符」的佔位是10.

echo mb_internal_encoding();

PHP內建的字串長度函數strlen無法正確處理中文字串,它得到的只是字串所佔的位元組數。對於GB2312的中文編碼,strlen得到的值是漢字個數的2倍,而對於UTF-8編碼的中文,就是3倍的差異了(在 UTF-8編碼下,一個漢字佔3個位元組)。

採用mb_strlen函數可以較好地解決這個問題。 mb_strlen的用法和 strlen類似,只不過它有第二個可選參數用於指定字元編碼。例如得到UTF-8的字串$str長度,可以用 mb_strlen($str,'UTF-8')。如果省略第二個參數,則會使用PHP的內部編碼。內部編碼可以透過 mb_internal_encoding()函數得到。

要注意的是,mb_strlen並不是PHP核心函數,使用前需要確保在php.ini中載入了php_mbstring.dll,也就是確保「extension=php_mbstring.dll」這一行存在並且沒有被註解掉,否則會出現未定義函數的問題。

以上是php 中strlen和mb_strlen的差別你知道嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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