php判斷字串長度 strlen()與mb_strlen()函數

巴扎黑
發布: 2016-11-09 14:38:49
原創
1414 人瀏覽過

strlen()

PHP strlen() 函數

定義與用法

strlen() 函數傳回字串的長度。

語法

strlen(string)

參數:string 
描述:必需。規定要檢查的字串。

 程式碼如下   

‘; 
echo mb_strlen($str,‘UTF8‘); 
//输出结果 
//14 
//6 
?>
登入後複製

結果分析:在strlen計算時,對待一個UTF8的中文字元是3個長度,所以「中文a字1reee
結果分析:strlen計算時,對待一個UTF8的中文字元是3個長度,所以「中文a字1」長度是3*4+2=14 

在mb_strlen計算時,選符號」長度定內碼為UTF8,則會將一個中文字元當作長度1來計算,所以「中文a字1符」長度是6


mb_strlen()函數

要注意的是,mb_strlen並不是PHP核心函數,使用前需要確保在php.ini中載入了php_mbstring.dll,即確保

「extension=php_mbstring.dll」這一行存在並且沒有被註解掉,否則會出現未定義函數的問題。

程式碼如下      

登入後複製

「中文a字1符」 的strlen($str)值是14,mb_strlen($str)值是6,則可以計算出「中文a字1符」的佔位是10.

講解這兩者之間的區別

 代碼如下   


';//14
echo mb_strlen($str,'utf8').'
';//6 echo mb_strlen($str,'gbk').'
';//8 echo mb_strlen($str,'gb2312').'
';//10 ?>
登入後複製

結果分析:在strlen計算時,對待一個UTF8的

結果分析:在strlen計算時,對待一個UTF8的中文字符是3個長度長度是3*4+2=14,在mb_strlen

計算時,選定內碼為UTF8,則會將一個中文字元當作長度1來計算,所以「中文a字1符」長度是6 .

雖然上面函數可以簡單解決一些中英文混合問題,但是不能用於實實際中,下面我來給各位朋友介紹其它比較好的辦

法。

PHP取得中英文混合字串長度的實作碼如下,1中文=1位,2英文=1位,可自行修改

 程式碼如下   

/*** PHP获取字符串中英文混合长度 * @param $str string 字符串* @param $$charset string 编码* @return 返回长度,1中文=1位,2英文=1位*/function strLength($str,$charset='utf-8'){if($charset=='utf-8') $str = iconv('utf-8','gb2312',$str);$num = strlen($str);$cnNum = 0;for($i=0;$i<$num;$i++){if(ord(substr($str,$i+1,1))>127){$cnNum++;$i++;}}$enNum = $num-($cnNum*2);$number = ($enNum/2)+$cnNum;return ceil($number);}
//测试输出长度都为15$str1 = '测试测试测试测试测试测试测试测';$str2 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';$str3 = 'aa测试aa测试aa测试aa测试aaaaaa';echo strLength($str1,'gb2312');echo strLength($str2,'gb2312');echo strLength($str3,'gb2312');
登入後複製

截取字串函數

function msubstr($str, $start, $len) {
 $tmpstr = "";
 $strlen = $start + $len;
 for($i = 0; $i < $strlen; $i++){
  if(ord(substr($str, $i, 1)) > 127){
   $tmpstr.=substr($str, $i, 3);
   $i+=2;
  }else
   $tmpstr.= substr($str, $i, 1);
 }
 return $tmpstr;
}
echo msubstr("一二三天下致公english",0,10);
登入後複製


截斷字串函數

 0xa0) {
           $tmpstr .= substr($str, $i, 2);
           $i++;
       } else
           $tmpstr .= substr($str, $i, 1);
     }
   return $tmpstr;
 }
  
?>
登入後複製
UTF8中,一個中文字元佔3個位元組

 代碼如下   

function cc_msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
{
 if(function_exists("mb_substr"))
  return mb_substr($str, $start, $length, $charset);
 elseif(function_exists('iconv_substr')) {
  return iconv_substr($str,$start,$length,$charset);
 }
 $re['utf-8']   = "/[/x01-/x7f]|[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff]
[/x80-/xbf]{3}/";
 $re['gb2312'] = "/[/x01-/x7f]|[/xb0-/xf7][/xa0-/xfe]/";
 $re['gbk']   = "/[/x01-/x7f]|[/x81-/xfe][/x40-/xfe]/";
 $re['big5']   = "/[/x01-/x7f]|[/x81-/xfe]([/x40-/x7e]|/xa1-/xfe])/";
 preg_match_all($re[$charset], $str, $match);
 $slice = join("",array_slice($match[0], $start, $length));
 if($suffix) return $slice."…";
 return $slice;
}
登入後複製
   


GB2312 

編碼相容良好的函數


 程式碼如下   

rrreee🎜🎜🎜
相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!