《細說PHP》中strlen和mb_strlen的區別
在PHP中,strlen與mb_strlen是求字串長度的函式,但是對於一些初學者來說,如果不看手冊,也許不太清楚其中的區別。
下面透過例子,講解這兩者之間的區別。
先看例子:
|
結果分析:在strlen計算時,對待一個UTF8的中文字元是3個長度,所以“中文a字1符”長度是3*4+2=14,在mb_strlen計算時,選定內碼為UTF8,則會將一箇中文字元當作長度1來計算,所以“中文a字1符”長度是6 .
利用這兩個函式則可以聯合計算出一箇中英文混排的串的佔位是多少(一箇中文字元的佔位是2,英文字元是1)
1 |
echo ( strlen ( $str ) + mb_strlen( $str , 'UTF8' )) / 2;
|
例如 “中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,則可以計算出“中文a字1符”的佔位是10.
1 |
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”這一行存在並且沒有被註釋掉,否則會出現未定義函 數的問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1727/viewspace-2804950/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sizeof與strlen的區別
- PHP 中的 -> 和 :: 的區別PHP
- centos PHP7 yii2 報錯 Call to undefined function yii\\helpers\\mb_strlen()CentOSPHPUndefinedFunction
- 細說紛紜——Redis 和 Memcached 的區別Redis
- 細說new和malloc的十大區別
- php中TCP和UDP的區別PHPTCPUDP
- 「乾貨」細說 call、apply 以及 bind 的區別和用法APP
- php中aes加密和rsa加密的區別PHP加密
- 閒說: Java 中Comparable 和 Comparator 的區別Java
- PHP 中 bind 的用法 self 和 static 的區別PHP
- 請說說json和jsonp的區別?JSON
- 細說setTimeout/setImmediate/process.nextTick的區別
- 說說display:none和visibility:hidden的區別None
- php中的執行緒、程式和併發區別PHP執行緒
- PHP 中 include 和 require 的概要及區別介紹PHPUI
- php中const和define有什麼區別PHP
- PHP, Python和Java的區別分享PHPPythonJava
- 請說說 `<pre>` 和 `<code>` 標籤的區別?
- PHP7 ?? 與 ?: 的作用和區別PHP
- PHP new self()和new static()的區別PHP
- 請說說escape、encodeURI、decodeURI、encodeURIComponent和decodeURIComponent的區別?
- 請說說`<script>`、`<script async>`和`<script defer>`的區別
- linux是什麼作業系統 linux和windows的區別詳細說明Linux作業系統Windows
- PHP 中`Closure`和`Callable`的區別以及在 Redis 訂閱方法中的使用PHPRedis
- DeFi和CeFi的區別詳細講解
- JavaScript中for in 和for of的區別JavaScript
- Js中for in 和for of的區別JS
- mysql中!=和is not的區別MySql
- Python中is和==的區別Python
- JavaScript中==和===的區別JavaScript
- Linux中“>”和“>>”的區別Linux
- Python 中 is 和 == 的區別Python
- mysql中“ ‘ “和 “ ` “的區別MySql
- 求陣列長度的兩種方法,以及區別(strlen sizeof)陣列
- 說說Loader和Plugin的區別?編寫Loader,Plugin的思路?Plugin
- 面試官:兄弟,說說基本型別和包裝型別的區別吧面試型別
- PHP 定義常量 define 和 const的區別PHP
- sizeof和strlen計算陣列型別和指標型別字串陣列型別指標字串