截取中英文混排字符串的函数

   效率比mb_string要高,尤其是当截取的跨度越大,和substr的效率越接近。不过我个人还是更喜欢用substr($str,$start,$len).chr(0),因为它的效率是最好的,更多时候没有必要对字符串作如此严格的截取。

public function csubstr($str,$start,$len=0){

  
$strlen=strlen($str);

  
/*默认取开始到末尾*/
  
if($len > $strlen - $start || $len <= 0)
    
$len = $strlen - $start;

  if(
$start >= $strlen)
    return
$str
  elseif(
$start < 0)
    
$start = 0;

    

  
/*计算截取字符串的开始位置*/

  
if($start > 0){
    for(
$i = 0 ; $i < $strlen ; $i++) {        
      if(
ord($str[$i])>0xa0)
        
$i++;

      if(
$i >= $start){
        
$start = $i+1;
        break;
      }
    }
  }

  
/*计算截取字符串的後束位置*/

  
if($start + $len < $strlen){
      for(
$i = 0 ; $i < $strlen ; $i++) {
      
/*如果是中文字符串,i++*/
      
if(ord($str[$i])>0xa0)
        
$i++;

      if(
$i >= $start + $len-1){
        
$len = $i - $start + 1;
        break;
      }
    }
  }
  return
substr($str,$start,$len);
}

上一篇: Windows下的Apache+MySQL+PHP运行环境的搭建基础篇
下一篇: MySQL的本地数据安全隐患

发表评论

评论内容 (必填):

点击获得Trackback地址
My E-mail