php关于中文字符串的操作(计算和截取)

/*
* 中文截取,支持gb2312,gbk,utf-8,big5
*
* @param string $str 要截取的字串
* @param int $start 截取起始位置
* @param int $length 截取长度
* @param string $charset utf-8|gb2312|gbk|big5 编码
* @param $suffix 是否加尾缀
*/
function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true){
   if(function_exists("mb_substr"))
   {
           if(mb_strlen($str, $charset) <= $length) return $str;
           $slice = mb_substr($str, $start, $length, $charset);
   }
   else
   {
           $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);
           if(count($match[0]) <= $length) return $str;
           $slice = join("",array_slice($match[0], $start, $length));
   }
   if($suffix) return $slice."…";
   return $slice;
}
/*
*中文字符串长度
*/
function abslength($str){
    $len=strlen($str);
    $i=0;
    while($i<$len)
    {
        if(preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str[$i]))
        {
            $i+=2;
        }
        else
        {
            $i+=1;
        }
    }
    return $i;
}


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: php
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.