对于一般情况,这样就行了function csubstr($str,$len)
{
$engword = 0;
for($i=0;$i<$len;$i++){
$c = substr($str,$i,1);
if(ord($c)<127) $engword++;
}
if($engword%2==1){ //英文数为奇数
if($len%2==1) $str = substr($str,0,$len);
else $str = substr($str,0,$len-1);
}
else{//英文数为双数
if($len%2==1) $str = substr($str,0,$len-1);
else $str = substr($str,0,$len);
}
return $str;
}有的人在ord($c)<127
用
ord($c)<0xa0
不过我用前者不曾出现任何错误,所以.....
{
$engword = 0;
for($i=0;$i<$len;$i++){
$c = substr($str,$i,1);
if(ord($c)<127) $engword++;
}
if($engword%2==1){ //英文数为奇数
if($len%2==1) $str = substr($str,0,$len);
else $str = substr($str,0,$len-1);
}
else{//英文数为双数
if($len%2==1) $str = substr($str,0,$len-1);
else $str = substr($str,0,$len);
}
return $str;
}有的人在ord($c)<127
用
ord($c)<0xa0
不过我用前者不曾出现任何错误,所以.....
CSDN 上有很多这方面的旧贴!
一般的这种文字截取是为了做提示性的内容,所以最后一个字符是否有效并不重要。
加上chr(0)的原因是若最后一个字符若是被截断的全角字,则用其补空。不是加上也没有影响。如需想确切的知道,可用ddboy(呀) 的方法。有意义的截取应截取到段末或句尾。
参照ddboy(呀)的方法