来自phpcms /** * 字符截取 支持utf8/gbk * @param $string * @param $length * @param $dot */function str_cut($string, $length, $dot = '...') { $strlen = strlen($string); if($strlen $string = str_replace(array(' ',' ', '&', '', ''', '“', '”', '—', '<', '>', '·', '…'), array('∵',' ', '&', '', ', '“', '”', '—', '', '·', '…'), $string); $strcut = ''; if(strtolower(charset) == 'utf-8') { $length = intval($length-strlen($dot)-$length/3); $n = $tn = $noc = 0; while($n $t = ord($string[$n]); if($t == 9 || $t == 10 || (32 $tn = 1; $n++; $noc++; } elseif(194 $tn = 2; $n += 2; $noc += 2; } elseif(224 $tn = 3; $n += 3; $noc += 2; } elseif(240 $tn = 4; $n += 4; $noc += 2; } elseif(248 $tn = 5; $n += 5; $noc += 2; } elseif($t == 252 || $t == 253) { $tn = 6; $n += 6; $noc += 2; } else { $n++; } if($noc >= $length) { break; } } if($noc > $length) { $n -= $tn; } $strcut = substr($string, 0, $n); $strcut = str_replace(array('∵', '&', '', ', '“', '”', '—', '', '·', '…'), array(' ', '&', '', ''', '“', '”', '—', '<', '>', '·', '…'), $strcut); } else { $dotlen = strlen($dot); $maxi = $length - $dotlen - 1; $current_str = ''; $search_arr = array('&',' ', '', ', '“', '”', '—', '', '·', '…','∵'); $replace_arr = array('&',' ', '', ''', '“', '”', '—', '<', '>', '·', '…',' '); $search_flip = array_flip($search_arr); for ($i = 0; $i $current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i]; if (in_array($current_str, $search_arr)) { $key = $search_flip[$current_str]; $current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str); } $strcut .= $current_str; } } return $strcut.$dot;}
复制代码