用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; }