PHP截取指定长度字符串
主要用于一些新闻摘要系统中,还有新闻标题这些需要截短内容的场合。直接贴出实现的PHP函数。代码如下:
//====================================================
//截取指定长度字符串
//$title:要截取的字串
//$start:从第几个字符开始截取
//$len:截取的字串长度
//$magic:是否将两个半角字符做一个全角字符计算(true或false)
//如:echo FSubstr('中china华人民共和国',0,3,true); //返回"中chin"
//====================================================
function FSubstr($title,$start,$len,$magic=true){
$length = 0;
if($len == "") $len = strlen($title);
if($start > 0){
$cnum = 0;
for($i=0;$i<$start;$i++) {if(ord(substr($title,$i,1)) >= 128) $cnum ++;}
if($cnum%2 != 0) $start--;
unset($cnum);
}
if(strlen($title)<=$len) return substr($title,$start,$len);
$alen = 0;
$blen = 0;
$realnum = 0;
for($i=$start;$i<strlen($title);$i++){
$ctype = 0;
$cstep = 0;
$cur = substr($title,$i,1);
if($cur == "&") {
if(substr($title,$i,4) == "<"){
$cstep = 4;
$length += 4;
$i += 3;
$realnum ++;
if($magic) {$alen ++;}
} else if(substr($title,$i,4) == ">"){
$cstep = 4;
$length += 4;
$i += 3;
$realnum ++;
if($magic) {$alen ++;}
} else if(substr($title,$i,5) == "&"){
$cstep = 5;
$length += 5;
$i += 4;
$realnum ++;
if($magic){$alen ++;}
} else if(substr($title,$i,6) == """){
$cstep = 6;
$length += 6;
$i += 5;
$realnum ++;
if($magic){$alen ++;}
} else if(substr($title,$i,6) == "'"){
$cstep = 6;
$length += 6;
$i += 5;
$realnum ++;
if($magic){$alen ++;}
} else if(preg_match("/&#(\d+);/i",substr($title,$i,8),$match)){
$cstep = strlen($match[0]);
$length += strlen($match[0]);
$i += strlen($match[0])-1;
$realnum ++;
if($magic){
$blen ++;
$ctype = 1;
}
}
}else{
if(ord($cur)>=128){
$cstep = 2;
$length += 2;
$i += 1;
$realnum ++;
if($magic){
$blen ++;
$ctype = 1;
}
}else{
$cstep = 1;
$length +=1;
$realnum ++;
if($magic){$alen++;}
}
}
if($magic){
if(($blen*2+$alen) == ($len*2)) break;
if(($blen*2+$alen) == ($len*2+1)){
if($ctype == 1){
$length -= $cstep;
break;
}else{
break;
}
}
}else{
if($realnum == $len) break;
}
}
unset($cur);
unset($alen);
unset($blen);
unset($realnum);
unset($ctype);
unset($cstep);
return substr($title,$start,$length);
}
更新时间:2010-6-17
|