首页站内杂志技术文摘
文章内容页

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

  • 作者:雨祺
  • 来源: 原创
  • 发表于2022-02-08 14:40:01
  • 被阅读0
  • 帝国cms比较完美的长文章自动分页函数,不破坏html格式,帝国cms专用,长文章分段,不破坏格式。美文苑写的智能截取函数:
    1. <?php  
    2. //智能截取 
    3. function AI_mb_substr($str,$length,$encode='utf8',$flags='. ! ? 。 ! ?'){ 
    4.     mb_internal_encoding($encode); 
    5.     $mylen=mb_strlen($str); 
    6.     if($mylen<=$length)return $str; 
    7.     $flagsr=explode(' ',$flags); 
    8.     for($i=$length;$i<$mylen;$i++){ 
    9.         if(in_array(mb_substr($str,$i,1),$flagsr))break
    10.     } 
    11.     for($j=$length-1;$j>-1;$j--){ 
    12.         if(in_array(mb_substr($str,$j,1),$flagsr))break
    13.     } 
    14.     if($j==-1 && $i==$mylen){ 
    15.        
    16.     }elseif($j==-1){ 
    17.         $length=$i+1; 
    18.     }elseif($i==$mylen){ 
    19.         $length=$j+1; 
    20.     }else
    21.         if($i+$j>2*$length){ 
    22.             $length=$j+1; 
    23.         }else
    24.             $length=$i+1; 
    25.         } 
    26.     } 
    27.     return mb_substr($str,0,$length); 
    28. //智能分页 
    29. function subHtml($html,$length=10,$fenyefu='[!--jiuhecai的分页符--]') {  
    30. $result = '';  
    31. $tagStack = array();  
    32. $len = 0; 
    33. //$dlength=$length; 
    34. $reallen=mb_strlen(strip_tags($html),'utf8'); 
    35. if($reallen<$length*1.2)return $html; 
    36. $jhcflag=0; 
    37. $contents = preg_split("~(<[^>]+?>)~si", $html, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 
    38. foreach($contents as $tag) {  
    39.     if (trim($tag) == ""continue;  
    40.     if (preg_match("~<([a-z0-9]+).*?/>~si", $tag)) { 
    41.         $result .= $tag;  
    42.     } else if (preg_match("~</([a-z0-9]+).*?>~si", $tag, $match)) {  
    43.         if (end($tagStack) == $match[1]) { 
    44.             array_pop($tagStack); 
    45.             $result .= $tag; 
    46.              
    47.         }  
    48.     } else if (preg_match("~<([a-z0-9]+).*?>~si", $tag, $match)) {  
    49.         array_push($tagStack, $match[1]);  
    50.         $result .= $tag;  
    51.     } else if (preg_match("~<!--.*?-->~si", $tag)) {  
    52.         $result .= $tag;  
    53.     } else {  
    54.         if ($len + mb_strlen($tag,'utf8') < $length) {  
    55.             $result .= $tag;  
    56.             $len += mb_strlen($tag,'utf8'); 
    57.         } else {  
    58.             if(end($tagStack)=='a'){ 
    59.                 $result .= $tag;  
    60.                 $len += mb_strlen($tag,'utf8'); 
    61.             }else
    62.                 if($jhcflag)break
    63.                 $str = AI_mb_substr($tag,$length - $len + 1,'utf8');  
    64.                 $len += mb_strlen($str,'utf8'); 
    65.                 $result .= $str; 
    66.                  
    67.                if($len>$length){ 
    68.                    if($tag==$str){ 
    69.                        $jhcflag=1; 
    70.                         
    71.                    }else
    72.                        break
    73.                    } 
    74.                     
    75.                }  
    76.             } 
    77.              
    78.         }  
    79.     }  
    80. $houbu=$qianbu=''
    81. if($tagStack){ 
    82.     $houbu='<'.join($tagStack,'><').'>'
    83.     foreach($tagStack as $tag)$qianbu = '</' . $tag . '>'.$qianbu; 
    84. $html=substr($html,strlen($result)); 
    85. $result=$result.$qianbu; 
    86. if($html){ 
    87.     $html=$houbu.$html; 
    88.     $result.=$fenyefu.subHtml($html,$length,$fenyefu); 
    89. return $result;  
    用法:
    1. $str = "<div><table>x<tr>1s<td>一二三四<a href=iii title='wo caonima'>5六7八</a>九十一二三四五六七八九10从前有座山,山里只有座庙,苗栗有.个老和尚真是的!</td></tr></table></div>";  
    2. echo subHtml($str,6); 
    【审核人:站长】

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

        本文链接:https://www.meiweny.cn/zazhi/zhongwangjiaocheng/79.html

        赞一下

        深度阅读

        • 您也可以注册成为美文苑的作者,发表您的原创作品、分享您的心情!

        阅读记录

          关注美文苑