在php中使用mb_strlen()函式和mb_substr()函式
阿新 • • 發佈:2019-01-03
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"配置所指的路徑裡。
當字元全是英文字元的時候,兩者是一樣。這裡主要比較一下,中英文混排的時候,兩個計算結果。(測試時編碼方式是UTF8)
<?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
mb_substr()函式的使用:
PHP擷取字串的函式有:substr() / mb_substr() / mb_strcut()
這些字串的區別是什麼呢?
- substr()函式分割包括中文字元往往會遇到亂碼問題
- 而mb_substr()分割中文字串就不會有亂碼問題
- 同樣的是用mb_strcut()分割中文字串也沒有亂碼的問題
mb_substr()、mb_strcut的用法與substr()相似,只是在mb_substr()、mb_strcut()函式後面要指定字串的編碼。mb_substr()、mb_strcut函式是需要開啟伺服器的php_mbstring.dll,在php.ini在把php_mbstring.dll開啟即可。
mb_substr是按字元分割,而mb_strcut是按位元組來分割,但是都不會產生半個字元的現象。
例如:
- $aaa = "this這是中文字串";
- echo mb_substr($aaa,0,6,'UTF-8');//輸出值為: this這是
- echo mb_strcut($aaa,0,6,'UTF-8');//輸出值為:this這