smart下截取汉字(utf8编码和gb2312编码)

字体大小: 中小 标准 ->行高大小: 标准
utf-8编码,一个汉字占三个字节:

php代码: 

 

gb2312编码,一个汉字占两字节:

php代码: 

function smarty_modifier_cntruncate($string, $strlen = 20, $etc = '...', $keep_first_style = false)
{
    $strlen = $strlen*2;
    $string = trim($string);
    if ( strlen($string) <= $strlen ) {
    return $string;
}
$str = strip_tags($string);
$j = 0;
for($i=0;$i<$strlen;$i++) {
    if(ord(substr($str,$i,1))>0xa0) $j++; 
}
if($j%2!=0) $strlen++; 
$rstr=substr($str,0,$strlen);
if (strlen($str)>$strlen) {$rstr .= $etc;} 
 

if ( $keep_first_style == true && ereg('^<(.*)>,$string) ) { 
if ( strlen($str) <= $strlen ) {
 return $string;
 }
 $start_pos = strpos($string,substr($str,0,4)); 
$end_pos = strpos($string,substr($str,-4));
 $end_pos = $end_pos+4;
 $rstr = substr($string,0,$start_pos) . $rstr . substr($string,$end_pos,strlen($string));
 }
 return $rstr;
 } 
function smarty_modifier_cntruncate($string, $strlen = 20, $etc = '...', $keep_first_style = false) { 
$strlen = $strlen*3;
 $string = trim($string); 
if ( strlen($string) <= $strlen ) {
 return $string; 
}
 $str = strip_tags($string);
 $j = 0; 
for($i=0;$i<$strlen;$i++) { 
if(ord(substr($str,$i,1))>0xa0){
 $i+=2; $j+=3;
} else {
$j++;
}
 } 
$rstr=substr($str,0,$j); 
if (strlen($str)>$strlen ) {
$rstr .= $etc;
} 
if ( $keep_first_style == true && ereg('^<(.*)> ,$string) ) { 
if ( strlen($str) <= $strlen ) {
 return $string; 
} 
$start_pos = strpos($string,substr($str,0,4)); 
$end_pos = strpos($string,substr($str,-4)); 
$end_pos = $end_pos+4; 
$rstr = substr($string,0,$start_pos) . $rstr . substr($string,$end_pos,strlen($string));
 } 
return $rstr; }

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/535.html