用perl截取字符串,字符串中含有中文、英文、數字和各種符號,也包含中文標點符號,截取一定數量的字符,并且截取之后中文是完整的,不會出現亂碼或問號。
sub makelen($$)
{
my($sstr,$slen)=@_;
my $makelen,$parity;
$mslen=length($sstr);
if($mslen>$slen)
{
for($mn=0;$mn<$slen;$mn++) #在要求的長度內
{
$ss=substr($sstr,$mn,1);
if(ord($ss)<127) #為英文
{
$parity+=1;
}
}
if($parity%2==1) #含英文長度為奇數
{
if($slen%2==1) #如果所要求的長度也為奇數
{
$tmpstr=substr($sstr,0,$slen);
}
else #所要求的長度為偶數
{
$tmpstr=substr($sstr,0,$slen-1);
}
}
else #含英文長度為偶數或者為0,0也為偶數
{
if($slen%2==1) #如果所要求的長度為奇數
{
$tmpstr=substr($sstr,0,$slen-1);
}
else #所要求的長度為偶數
{
$tmpstr=substr($sstr,0,$slen);
}
}
$makelen=$tmpstr;
}
else
{
$makelen=$sstr;
}
return $makelen;
}