如果你想转换编码改变GB2312,只需把后面$code的改下就ok,
这个比上面那个写的更好,功能自己觉得还是可以,这个还要看你数据库的编码是什么的,最好保持一致,以致不会出现乱码
function cut_str($string,$sublen,$start =0,$code ='UTF-8') {
if($code =='UTF-8')
{
$pa ="/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
preg_match_all($pa,$string,$t_string);
if($code =='UTF-8')
{
$pa ="/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
preg_match_all($pa,$string,$t_string);
if(count($t_string[0]) -$start >$sublen) return join('',array_slice($t_string[0],$start,$sublen))."...";
return join('',array_slice($t_string[0],$start,$sublen));
}
else
{
$start =$start*2;
$sublen =$sublen*2;
$strlen =strlen($string);
$tmpstr ='';
return join('',array_slice($t_string[0],$start,$sublen));
}
else
{
$start =$start*2;
$sublen =$sublen*2;
$strlen =strlen($string);
$tmpstr ='';
for($i=0;$i<$strlen;$i++)
{
if($i>=$start &&$i<($start+$sublen))
{
if(ord(substr($string,$i,1))>129)
{
$tmpstr.=substr($string,$i,2);
}
else
{
$tmpstr.=substr($string,$i,1);
}
}
if(ord(substr($string,$i,1))>129) $i++;
}
if(strlen($tmpstr)<$strlen ) $tmpstr.="...";
return $tmpstr;
}
}
{
if($i>=$start &&$i<($start+$sublen))
{
if(ord(substr($string,$i,1))>129)
{
$tmpstr.=substr($string,$i,2);
}
else
{
$tmpstr.=substr($string,$i,1);
}
}
if(ord(substr($string,$i,1))>129) $i++;
}
if(strlen($tmpstr)<$strlen ) $tmpstr.="...";
return $tmpstr;
}
}
转载于:https://blog.51cto.com/xujunyan/277636