控制面板 - 帮助中心 - 付款方式 - 常用文档 - 软件下载 -   
服务中心
当前位置:首页 - 服务中心 - 网络学院

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) == "&lt;"){
    $cstep = 4;
    $length += 4;
    $i += 3;
    $realnum ++;
    if($magic) {$alen ++;}
   } else if(substr($title,$i,4) == "&gt;"){
    $cstep = 4;
    $length += 4;
    $i += 3;
    $realnum ++;
    if($magic) {$alen ++;}
   } else if(substr($title,$i,5) == "&amp;"){
    $cstep = 5;
    $length += 5;
    $i += 4;
    $realnum ++;
    if($magic){$alen ++;}
   } else if(substr($title,$i,6) == "&quot;"){
    $cstep = 6;
    $length += 6;
    $i += 5;
    $realnum ++;
    if($magic){$alen ++;}
   } else if(substr($title,$i,6) == "&#039;"){
    $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

7*24小时咨询热线:400-628-6536 0371-86013552 19937165195
传真:0371-86013552-6612 服务邮箱:web@3a88.com 代理邮箱:agent@3a88.com 备案邮箱:beian@3a88.com
运营商:郑州金飞科技有限公司 工商营业执照号:9141010567945717XL
公司地址:郑州高新技术产业开发区木兰里9号1号楼1单元14层310号 邮政编码:450000 豫ICP备12025635号-1 豫公网安备 41010502003077号