技术文摘

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

作者:雨祺   发表于:
浏览:53次    字数:2267  原创
级别: 站长   总稿: 69 篇,  月稿: 1
帝国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); 

【审核人:站长】

收藏   加好友   生成海报   分享
点赞(0)
打赏
Tags: 函数 文章 完美 帝国CMS

发布者资料

热门文章

技术文摘

查看更多技术文摘
首页
栏目
搜索
会员
投稿