/* 截取固定長度漢字差半個字元 */
function tit($str, $length, $suffix=false ,$charset="utf-8",$conlen = false )
{
//$length -= 1;
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['utf8'] = "/[\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])/";
$allen = (strlen($str) + mb_strlen($str,'utf-8'))/4 ;
if($allen <= $length or !$length) return $str;
preg_match_all($re[$charset], $str, $match);
$c = 0;
$fv = '';
foreach ($match[0] as $v) {
$len = strlen($v) > 1 ? 2 : 1 ;
//dump($v.'-'.$len);
$c += $len;
$fv .= $v;
if($c == $length*2 or $c == $length*2+1)
{
return ($suffix) ? $fv."…" : $fv;
break;
}
}
}