好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php判断字符串长度 strlen()与mb_strlen()函数 - php函数

php判断字符串长度 strlen()与mb_strlen()函数

我们知道在php中要判断字符串长度我们只要使用strlen()与mb_strlen()函数既可以了,但是并不是我们想得这么简单,特别是在对中英文混合时上面函数有点力不从心,下面我来给各位朋友介绍.

strlen()

PHP strlen() 函数

定义和用法: strlen() 函数返回字符串的长度.

语法: strlen(string)

参数: string 

描述: 必需,规定要检查的字符串.

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.

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 = '中文a字1符' ; echo   strlen ( $str ). '<br>' ; //14   echo  mb_strlen( $str , 'utf8' ). '<br>' ; //6   echo  mb_strlen( $str , 'gbk' ). '<br>' ; //8   echo  mb_strlen( $str , 'gb2312' ). '<br>' ; //10   ?>  

结果分析: 在strlen计算时,对待一个UTF8的中文字符是3个长度,所以[中文a字1符]长度是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' ); 

截取字符串函数

UTF8编码,在UTF8中,一个中文字符占3个字节,代码如下:

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

GB2312编码,在gb2312中,一个中文字符占2个字节,代码如下:

<?php  function  msubstr( $str ,  $start ,  $len ) {    //?       $tmpstr  =  "" ;      $strlen  =  $start  +  $len ;      if (preg_match( '/[/d/s]{2,}/' , $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 ;   }      ?> 

编码兼容性良好的函数,代码如下:

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

查看更多关于php判断字符串长度 strlen()与mb_strlen()函数 - php函数的详细内容...

  阅读:39次