首頁  >  文章  >  後端開發  >  php判斷字串長度 strlen()與mb_strlen()函數

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

巴扎黑
巴扎黑原創
2016-11-09 14:38:491566瀏覽

strlen()

PHP strlen() 函數

定義與用法

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

語法

strlen(string)

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

 程式碼如下   

<?php 
$str=‘中文a字1符‘; 
echo strlen($str); 
echo ‘<br />‘; 
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」這一行存在並且沒有被註解掉,否則會出現未定義函數的問題。

程式碼如下      

<?php 
$str=‘中文a字1符‘; 
//计算如下 
echo (strlen($str) + mb_strlen($str,‘UTF8‘)) / 2; 
echo 
//输出结果 
//10 
?>

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

講解這兩者之間的區別

 代碼如下   


<?php
//测试时文件的编码方式要是UTF8
$str=&#39;中文a字1符&#39;;
echo strlen($str).&#39;<br>&#39;;//14
echo mb_strlen($str,&#39;utf8&#39;).&#39;<br>&#39;;//6
echo mb_strlen($str,&#39;gbk&#39;).&#39;<br>&#39;;//8
echo mb_strlen($str,&#39;gb2312&#39;).&#39;<br>&#39;;//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=&#39;utf-8&#39;){if($charset==&#39;utf-8&#39;) $str = iconv(&#39;utf-8&#39;,&#39;gb2312&#39;,$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 = &#39;测试测试测试测试测试测试测试测&#39;;$str2 = &#39;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&#39;;$str3 = &#39;aa测试aa测试aa测试aa测试aaaaaa&#39;;echo strLength($str1,&#39;gb2312&#39;);echo strLength($str2,&#39;gb2312&#39;);echo strLength($str3,&#39;gb2312&#39;);

截取字串函數

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);


截斷字串函數

<?php
function msubstr($str, $start, $len) {   //ȡ
   $tmpstr = "";
   $strlen = $start + $len;
   if(preg_match(&#39;/[/d/s]{2,}/&#39;,$str)){$strlen=$strlen-2;}
   for($i = 0; $i < $strlen; $i++) {
       if(ord(substr($str, $i, 1)) > 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(&#39;iconv_substr&#39;)) {
  return iconv_substr($str,$start,$length,$charset);
 }
 $re[&#39;utf-8&#39;]   = "/[/x01-/x7f]|[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff]
[/x80-/xbf]{3}/";
 $re[&#39;gb2312&#39;] = "/[/x01-/x7f]|[/xb0-/xf7][/xa0-/xfe]/";
 $re[&#39;gbk&#39;]   = "/[/x01-/x7f]|[/x81-/xfe][/x40-/xfe]/";
 $re[&#39;big5&#39;]   = "/[/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🎜🎜🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn