最近要做个长文章分页 看似简单的功能 实现起来确实比较有难度 网上搜索的都不太靠谱 问了一圈,没人会 长文章分页一个比较头疼的问题就是 就把HTML标签截断,导致文章错位 最后自己解决了,分享一下 以下为PHP解决办法:
/** * 长文章分段 * @param string $article 文章内容 * @param number $word_number 文章字节限制 * @return array */ private function article_addpage($article,$word_number=2000){
$con = explode("<table",$article); if (count($con)>1){ return $article; //如果包含了表格就跳过,不进行分页处理 }else{ $word_all=""; $word_num=0; $n=""; $weor_cha=($word_number/10);//(上下浮动每页字数的10%) $article=preg_replace("/<div(.*?)>/m", "<br>", $article); $article= str_replace("</div>","", $article); $article=preg_replace("/<span(.*?)>/m", "<br>", $article); $article= str_replace("</span>","", $article); $article=preg_replace("/<p(.*?)>/m", "<br>", $article); $article= str_replace("</p>","", $article); $article= str_replace(chr(10),"<br>", $article); $article=preg_replace("/<(.*?)<br>(.*?)>/m", "<\\1 \\2>", $article);
$artinfo=split("<br>",$article);//根据字符串确定段落
$art_num=count($artinfo);//确定段落数 $page_num_word=array();
for($i=0;$i<=$art_num-1;$i++){ $page_num_word[$i]=strlen($artinfo[$i]); $word_num=$word_num+$page_num_word[$i];//得到字数
if ($word_num-$weor_cha<=$word_number or $i==0){ $word_all.=$artinfo[$i]."<br>"; }else{
$word_all.="[nextpage]<br>".$artinfo[$i]; $word_num=0; } }
return $word_all;
} }
/** * 文章分页 * @param string $article 文章内容 * @param number $id 默认第一页 * @param string $page 当前第几页 * @return string */ private function article_fenpage($article,$id,$page){
$artinfo=explode("[nextpage]",$article);//根据字符串确定段落 $pages=count($artinfo);//确定段落数 $tempurla=""; $fenyedh=""; // echo $pages; //=======================================分页导航 //显示总页数 if ($pages>1){
//$fenyedh= $fenyedh."共有".$pages."页 "; $substart=$page-10; $sybend=$page+10; if ($substart<=1 ){ $substart=1; } if ($sybend>=$pages ){ $sybend=$pages; } //显示分页数 $first=1; $prev=$page-1; $next=$page+1; $last=$pages;
//$fenyedh = "<div class='pages c_txt'>"; //$fenyedh= $fenyedh."<a href='?id=".$id."'>第一页</a> "; $fenyedh= $fenyedh."<a href='?page=".$id."' class='inline_b up_page'>上一页</a> "; for ($i=$substart;$i<$page;$i++){ $fenyedh= $fenyedh."<a href='?page=".$i."' class='inline_b'>".$i."</a> "; } $fenyedh= $fenyedh.'<a href="javascript:void(0);" title="1" class="inline_b current_pages">'.$page.'</a> '; //当前页 for ($i=$page+1;$i<=$sybend;$i++){ $fenyedh= $fenyedh."<a href='?page=".$i."' class='inline_b' title=".$i.">".$i."</a> ";} } if($next > $pages){ $href = 'javascript:void(0);'; }else{ $href = '?page='.$next; } $fenyedh= $fenyedh."<a href='".$href."' class='inline_b down_page'>下一页</a> "; $fenyedh .='<a href="'.Yii::app()->request->hostInfo.'/'.Yii::app()->request->pathInfo.'?view=all" title="全文浏览" class="inline_b">全文浏览</a>'; //$fenyedh= $fenyedh."<a href='?page=".$last."'>最后一页</a>"; //$fenyedh= $fenyedh."</div>";
//=======================================分页导航end return $fenyedh; //return $artinfo[$page-1]."<br>".$fenyedh; }
使用方法:
$page=!empty($_GET['page']) ? $_GET['page'] : 1; $detailContent = $this->article_addpage($detail->content(),$this->cutesize); $cutepage= $this->article_fenpage($detailContent,1,$page); $detailContent = explode('[nextpage]',$detailContent);