截取函数,中文一个,英文两个算一个

浏览:1156 发布日期:2013/10/28 分类:基础算法 关键字: 字符截取,插件大全
截取函数,中文一个,英文两个算一个
共享一个今天写的截取字符串函数,跟官方的不一样,用了你就知道/**
* 截取函数,中文一个,英文两个算一个
*/
function mbsubstr($str, $start=0, $length, $suffix=true, $charset="utf-8") {
    $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);
    
    $strArr = $match[0];
    $str = array_values(tempStrArr($strArr));
    $strArrCount = count($str);
    if($strArrCount == $length+1){
        $length += 1;
    }
    
    $slice = implode('',array_slice($str,$start,$length));
    if($strArrCount > $length){
        return $suffix ? $slice.'...' : $slice;
    }else{
        return $slice;
    }
}
function tempStrArr($strArr){
    $e = range('a','z');
    $i = count($strArr);
    foreach($strArr as $k=>$v){
        if(in_array(strtolower($v), $e)){
            if(in_array(strtolower($strArr[$k+1]), $e)){
                $strArr[$k] = $v.$strArr[$k+1];
                unset($strArr[$k+1]);
                break;
            }
        }elseif($v > 0 && $v < 10 && $strArr[$k+1] > 0 && $strArr[$k+1] < 10){
            $strArr[$k] = $v.$strArr[$k+1];
            unset($strArr[$k+1]);
            break;
        }
        $i--;
    }
    if($i > 0){
        $strArr = tempStrArr($strArr);
    }
    
    return $strArr;
}
共享这个代码。我总觉得哪里不对劲,有更好的思路的大神求思路



更多函数参见 http://chajiandaquan.com/function.html
评论( 相关
后面还有条评论,点击查看>>