位置:PHP教程 > PHP实例

PHP长文章分页显示

时间:2015-10-14
简介:PHP教程|如果有一篇比较长的文章或小说,在数据库中是保存在一个字段中,我们该怎么去对这个文章分页?本代码对纯文本有效,首先按字节数分页,但是以\n为分页点的<?ph

如果有一篇比较长的文章或小说,在数据库中是保存在一个字段中,我们该怎么去对这个文章分页?本代码对纯文本有效,首先按字节数分页,但是以\n为分页点的

<?php
  $c_page=isset($_GET['page'])?trim($_GET['page']):''; //去掉中间空格//当前页
  $contstr="第一行GDSGVFGFDGFDGFDFDFDSFgfdgdf股份大股东方
  斯蒂芬斯蒂芬森
  第2行FDSAFDSFASDFF
  第3行FDSAFDSAFDSA,<br/>FSDAFDS.\nFDSAF
  第4行DSAFDSAFSDAF
  第5行FDSAFDSFDSFDSFF.DERRRRRRRRRRRRRRR我们 东方舵手RRRRRRRRRRRRRRRRRRRRRRRR";// 文字内容,可从数据库中查询出
  $listbyte=15; //每页显示字节数,正常情况下可设置为5000或其他
  //##寻找文章分页点----------
  $contlen=strlen($contstr);//全部的字节长度
$total=0; //总页数
  $listat[0]=0;//当前页面一共的字节数
  $lookAt=0;  //每页实际的字节数
  for($i=1;$i<$contlen/$listbyte+1;$i++){
      if($lookAt<$listbyte){
          $lookAt=$listbyte;
      }
      if($lookAt>$contlen){
          $total++;
          $listat[$total]=$contlen;
          break;
      }
      $endAt=strpos($contstr,"\n",$lookAt); //
      //如果余下的内容不足一页的1/5加到本页或找不到分页符则作一页处理
      if($endAt>$contlen-$listbyte/5 or intval($endAt)<1){
          $total++;
          $listat[$total]=$contlen; ///
          break;
      }
      else{
          $total++;
          $listat[$total]=$endAt;
          $lookAt=$endAt+$listbyte;
      }
  }
  //打印页码
  $page=intval($c_page);
  if(empty($page) or $page<1 or $page>$total) $page=1;
  if($total>1){
  for($i=1;$i<=$total;$i++){
      echo "<a href='?page=$i'>$i 页</a> ";
  }
  echo '总页数:',$total;
  }
  //输出当前页内容
  $stag=$page-1;
$startb=$listat[$stag];
if($startb>0){ //去除首个换行
  $startb=$startb+1;
  $cont=substr($contstr,$startb,$listat[$page]-$startb);
  echo "<BR/>文章内容:<BR/>";
  if($page>1){
  echo "[接上页] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",$cont;
  }
  }
  ?>

TAGS:PHP长文章分页

上一编:PHP+ShearPhoto实现网页调用摄像头拍照功能

下一编:如何设置php Session过期

NewHot手机版