方法一: 此方法长度按字的个数算,不分中英文,即一个字母和一个汉字的长度都是1,此方法在utf-8编码,截取中文要出现乱码
function showtitle($str,$strlen=10,$other=true) {
$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 && $other) {$rstr.='...';}
return $rstr;
}
方法二: 此方法是针对utf-8编码的,长度按字节算,一个字母的长度是1,一个汉字的长度则是2
function showtitle($str,$max_len){
$n = 0;
$noc = 0;
$len = strlen($str);
while ( $n < $len ) {
$t = ord($str[$n]);
if ($t == 9 || $t == 10 || (32 <= $t && $t <= 126)){
$tn = 1;
$n++;
$noc++;
}
else if ( 194 <= $t && $t <= 223 ){
$tn = 2;
$n += 2;
$noc += 2;
}
else if ( 224 <= $t && $t < 239 ){
$tn = 3;
$n += 3;
$noc += 2;
}
else if ( 240 <= $t && $t <= 247 ){
$tn = 4;
$n += 4;
$noc += 2;
}
else if ( 248 <= $t && $t <= 251 ){
$tn = 5;
$n += 5;
$noc += 2;
}
else if ( $t == 252 || $t == 253 ){
$tn = 6;
$n += 6;
$noc += 2;
}
else {
$n++;
}
if ( $noc >= $max_len ) {
break;
}
}
if ( $noc > $max_len ) {
$n -= $tn;
}
$result[0] = substr($str, 0, $n);
$result[1] = substr($str, $n,strlen($str));
return $result[0];
}
方法三:和方法二一样
function showtitle($string,$wordlength)
{
for ($i = 0 ; $stringlength < $wordlength ; $i++){
if(preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$string) == true){
$stringget .= substr($string,0,3);
$string = substr($string, 3);
$stringlength += 2;
if($stringlength + 1 == $wordlength && strlen($string) != 1){
$stringget .= ".";
return $stringget;
}
if($stringlength + 2 == $wordlength){
if($string == "") return $stringget;
strlen($string) == 3 ? $stringget .= substr($string,0,3) : $stringget .= "..";
return $stringget;
exit;
}
}
else
{
$stringget .= substr($string,0,1);
$string = substr($string, 1);
$stringlength += 1;
if ($stringlength + 1 == $wordlength ){
if($string == "") return $stringget;
strlen($string) == 1 ? $stringget .= substr($string,0,1) : $stringget .= ".";
return $stringget;
exit;
}
}
}
return $stringget;
}