1. 程式人生 > >在php中使用mb_strlen()函式和mb_substr()函式

在php中使用mb_strlen()函式和mb_substr()函式

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是按位元組來分割,但是都不會產生半個字元的現象。

例如:

  1. $aaa = "this這是中文字串";
  2. echo mb_substr($aaa,0,6,'UTF-8');//輸出值為: this這是
  3. echo mb_strcut($aaa,0,6,'UTF-8');//輸出值為:this這
引用自:http://www.lao8.org/html/8/2011-9-4/mb_substr.html