截取指定长度的字符串函数(顶好用,绝不会截错的)
我自己想出来的方法,自己写的函数,没有经过时间的考验的,哈哈
详细地址:http://web.scuec.edu.cn/~game002/summer/bbs/html/index.php?file=2003.03.11_09.55.10&lm=1/open
原理:
统计出需要截取长度中可见字符的个数,在ASCII表中其16进制值是从
20-7E
用ord()函数,即取ord(" ")~ord("~")之间的都为可以见的字符
一个汉字是有两个不可见字符组成,都不在ASCii表的可见字符内
统计出的可见字符为奇数,则截取奇数个字符组成串
若为偶数,则截取偶数个字符组成串~~
基本上就可以实现字符串截取的时候不出现错截了
function oushu($value) {//判断奇偶数
if($value/2==ceil($value/2)) {
return true;
}
else {
return false;
}
}
function visiblechar($value) {//如果字符的ascii码在空格和~符号以内则为可见
if(ord($value)>=ord(" ")&&ord($value)<=ord("~")) {
return true;
}
else {
return false;
}
}
function shortstring($code,$len) {//截取,在这里我们所设置的$len必须为偶数
$j=0;
$str=strtok($code,"");
if($len>=strlen($code)) {
return $code;
}
for($i=0;$i<$len;$i++) {//计算截取长度以内的可见字符个数
if($this->visiblechar($str[$i])) {
$j++;
}
}
if($this->oushu($j)) {
return substr($code,0,$len).'...';
}
else {
return substr($code,0,$len-1).'...';
}
}