帝国cms比较完美的长文章自动分页函数,不破坏html格式,帝国cms专用,长文章分段,不破坏格式。美文苑写的智能截取函数:
- <?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;
-
- $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);