当前位置:Linux教程 - Php - 中文汉字截取函数支持gb2312、big5、utf-8

中文汉字截取函数支持gb2312、big5、utf-8

颓废者学堂 -> 函数研究

中文汉字截取函数(支持gb2312、big5、UTF-8)

作者:木耳  时间:2004-05-22 16:07:13  来自:  责任编辑:clinch







这是这几天我在工作中因为项目需要写的一个中文汉字截取函数:


  Code:    
<?
#============================================================================
# 中文字符串截取函数
# 参数说明:
# $fStr:需要截最的原始字符串;
# $fStart:从第几个汉字后开始载取,从头开始截取使用 0
# $fLen:截取几个汉字
# $fCode:原始字符串的编码方式,默认为 gb2312 或 big5,UTF-8 按 UTF-8 编码方式截取
#----------------------------------------------------------------------------
Function msubstr ($fStr, $fStart, $fLen, $fCode = "") {
    switch (
$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() >= 3) {   
                if (
count($ar[0])>$fLen) {
                    return
join("",array_slice($ar[0],$fStart,$fLen))."...";
                }
                return
join("",array_slice($ar[0],$fStart,$fLen));
            } else {   
                return
join("",array_slice($ar[0],$fStart));
            }
            break;
        default:
            
$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 .= "...";
            Return
$tmpstr;
    }
}
?>  



使用举例:


  Code:    
<?
$a
= "一二三四五六七八九十";
$b = iconv("gb2312","UTF-8",$a);
echo
"a = ".msubstr($a,0,5)."<br>";
echo
"b = ".msubstr($b,0,5,"UTF-8")."<br>";
?>  



输出结果均是“一二三四五...”,如果有中英文混编,也不会出现只截取汉字半边字符的问题。