一个汉字作为一个字符进行字符串长度计算和切割
通常情况下,PHP中UTF-8编码的汉字占3个字符的长度,GBK编码的汉字占2个字符的长度,但是最近在做项目过程中,遇到客户提出的要求是这样:一个汉字按一个字符来计算,字母数字按正常来算。于是乎就有了以下的函数:
/** +---------------------------------------------------------- * @Right * 将一个汉字当做一个字符,字符串切割 +---------------------------------------------------------- * @access protected +---------------------------------------------------------- * @return object +---------------------------------------------------------- */ protected function my_mb_substr($str, $start=0, $length, $charset="utf-8") { if(function_exists("mb_substr")) return mb_substr($str, $start, $length, $charset); elseif(function_exists('iconv_substr')) { return iconv_substr($str,$start,$length,$charset); } $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); $slice = join("",array_slice($match[0], $start, $length)); return $slice; }