首页 > 其他 > 网站日记>正文

帝国cms比较完美的长文章自动分页函数,不破坏html格式

提示: 阅读权限:公开  

帝国cms专用,长文章分段,不破坏格式。jiuhecai写的智能截取函数:

<?php 
//智能截取
function AI_mb_substr($str,$length,$encode='utf8',$flags='. ! ? 。 ! ?'){
    mb_internal_encoding($encode);
    $mylen=mb_strlen($str);
    if($mylen<=$length)return $str;
    $flagsr=explode(' ',$flags);
    for($i=$length;$i<$mylen;$i++){
        if(in_array(mb_substr($str,$i,1),$flagsr))break;
    }
    for($j=$length-1;$j>-1;$j--){
        if(in_array(mb_substr($str,$j,1),$flagsr))break;
    }
    if($j==-1 && $i==$mylen){
      
    }elseif($j==-1){
        $length=$i+1;
    }elseif($i==$mylen){
        $length=$j+1;
    }else{
        if($i+$j>2*$length){
            $length=$j+1;
        }else{
            $length=$i+1;
        }
    }
    return mb_substr($str,0,$length);
}
//智能分页
function subHtml($html,$length=10,$fenyefu='[!--jiuhecai的分页符--]') { 
$result = ''; 
$tagStack = array(); 
$len = 0;
//$dlength=$length;
$reallen=mb_strlen(strip_tags($html),'utf8');
if($reallen<$length*1.2)return $html;
$jhcflag=0;
$contents = preg_split("~(<[^>]+?>)~si", $html, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
foreach($contents as $tag) { 
    if (trim($tag) == "") continue; 
    if (preg_match("~<([a-z0-9]+).*?/>~si", $tag)) {
        $result .= $tag; 
    } else if (preg_match("~</([a-z0-9]+).*?>~si", $tag, $match)) { 
        if (end($tagStack) == $match[1]) {
            array_pop($tagStack);
            $result .= $tag;
            
        } 
    } else if (preg_match("~<([a-z0-9]+).*?>~si", $tag, $match)) { 
        array_push($tagStack, $match[1]); 
        $result .= $tag; 
    } else if (preg_match("~<!--.*?-->~si", $tag)) { 
        $result .= $tag; 
    } else { 
        if ($len + mb_strlen($tag,'utf8') < $length) { 
            $result .= $tag; 
            $len += mb_strlen($tag,'utf8');
        } else { 
            if(end($tagStack)=='a'){
                $result .= $tag; 
                $len += mb_strlen($tag,'utf8');
            }else{
                if($jhcflag)break;
                $str = AI_mb_substr($tag,$length - $len + 1,'utf8'); 
                $len += mb_strlen($str,'utf8');
                $result .= $str;
                
               if($len>$length){
                   if($tag==$str){
                       $jhcflag=1;
                       
                   }else{
                       break;
                   }
                   
               } 
            }
            
        } 
    } 
}
$houbu=$qianbu='';
if($tagStack){
    $houbu='<'.join($tagStack,'><').'>';
    foreach($tagStack as $tag)$qianbu = '</' . $tag . '>'.$qianbu;
}
$html=substr($html,strlen($result));
$result=$result.$qianbu;
if($html){
    $html=$houbu.$html;
    $result.=$fenyefu.subHtml($html,$length,$fenyefu);
}
return $result; 
} 


$str = "<div><table>x<tr>1s<td>一二三四<a href=iii title='wo caonima'>5六7八</a>九十一二三四五六七八九10从前有座山,山里只有座庙,苗栗有.个老和尚真是的!</td></tr></table></div>"; 
echo subHtml($str,6);


上一篇:汉语文章的智能截取

下一篇:帝国cms文件名做伪静态插件

tags: 分页 帝国cms

返回首页

相关

热门

站内直通车

[!--temp.bottomnav--]
返回顶部