首頁 >後端開發 >php教程 >PHP的內建函數strlen以及mbstring的擴充函數mb_strlen之間的差異分析

PHP的內建函數strlen以及mbstring的擴充函數mb_strlen之間的差異分析

不言
不言原創
2018-07-16 09:21:021943瀏覽

這篇文章主要介紹了關於PHP內建函數strlen 和mbstring擴充函數mb_strlen的區別,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

EXAMPLE

$str_uncode = "简体中文Chinese(Simplified)";
//统计字符串长度
echo strlen($str_uncode).&#39;<br>&#39;;//结果:31
echo mb_strlen($str_uncode, &#39;UTF-8&#39;).&#39;<br>&#39;;结果:23
echo mb_strlen($str_uncode, &#39;GBK&#39;).&#39;<br>&#39;;结果:25
echo mb_strlen($str_uncode, &#39;GB2312&#39;).&#39;<br>&#39;;结果27

結果分析:

strlen 把一個中文按3位元組算(複雜的漢字會以4位元組算)

mb_strlen  'UTF- 8'編碼一個漢字以一個位元組位來算

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中文網!

相關推薦:

使用php如何掃描url死連結

#PHP中var_export的使用方法

以上是PHP的內建函數strlen以及mbstring的擴充函數mb_strlen之間的差異分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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