我初步理解是strlen只能計算英文字符,而mb_strlen是可以計算中文與英文字符的長度,下面我來詳細的介紹 strlen和mb_strlen的區別.
定義和用法:strlen() 函數返回字符串的長度
語法:strlen(string)
參數 描述
string 必需,規定要檢查的字符串。
而mb_strlen()函數的參考也是一樣的.
PHP實例代碼如下:
- <?php
- $str=‘中文a字1符‘;
- echo strlen($str);
- echo ‘<br />‘;
- echo mb_strlen($str,‘UTF8‘);
- //輸出結果
- //14
- //6
- ?>
結果分析:在strlen計算時,對待一個UTF8的中文字符是3個長度,所以“中文a字1符”長度是3*4+2=14.
在mb_strlen計算時,選定內碼為UTF8,則會將一個中文字符當作長度1來計算,所以“中文a字1符”長度是6.
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的內部編碼.
注意事項:php默認是不支持mb_strlen()函數的,需要安裝擴展模塊,安裝方法如下:
yum install php-mbstring
找到mbstring.so的位置,可以使用rpm -ql 安裝的rpm名,修改/etc/php.ini配置文件,增加如下代碼:
extension=php_mbstring.so
并確保php_mbstring.so模塊在extension_dir = "/usr/lib64/php/modules"配置所指的路徑里.
新聞熱點
疑難解答