php截字函數(支持UTF8和GB2312)

Function msubstr ($fStr, $fLen, $option = false,$fCode = "UTF-8") {
    $fStart = 0;
 switch (strtoupper($fCode)) {
        case "UTF-8" :
   preg_match_all("/[/x01-/x7f]|[/xc2-/xdf][/x80-/xbf]|/xe0[/xa0-/xbf][/x80-/xbf]|[/xe1-/xef][/x80-/xbf][/x80-/xbf]|/xf0[/x90-/xbf][/x80-/xbf][/x80-/xbf]|[/xf1-/xf7][/x80-/xbf][/x80-/xbf][/x80-/xbf]/", $fStr, $ar);  
            if(func_num_args() >= 2) {  
                if (count($ar[0])>$fLen) {
                    return join("",array_slice($ar[0],$fStart,$fLen)).($option==true?"...":"");
                }
                return join("",array_slice($ar[0],$fStart,$fLen));
            } else {  
                return join("",array_slice($ar[0],$fStart,$fLen));
            }
            break;
        default: //GBK or GB2312
            $fStart = $fStart*2;
            $fLen   = $fLen*2;
            $strlen = strlen($fStr);
            for ( $i = 0; $i < $strlen; $i++ ) {
                if ( $i >= $fStart && $i < ( $fStart+$fLen ) ) {
                    if ( ord(substr($fStr, $i, 1)) > 129 ) $tmpstr .= substr($fStr, $i, 2);
                    else $tmpstr .= substr($fStr, $i, 1);
                }
                if ( ord(substr($fStr, $i, 1)) > 129 ) $i++;
            }
            if ( strlen($tmpstr) < $strlen ) $tmpstr .= ($option==true?"...":"");
            return $tmpstr;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章