php长文章分页

<?
/**
* * 如果一篇文章内容较长(如40000字节的文章,且保存在一个字段中),可用以下代码进行分页显示
*本代码只对纯文本内容有效,首先按字节数分页,但是以\n为分页点的,不会将一段文字分到两页中。因此在符合字节数的条件下还需要有\n,如果没有则视为一段话,不进行分页。
*
* \n在文本框中为回车
*/
$c_page="";
if(isset($ _GET['page']))$c_page=$ _GET['page']; //去掉中间空格//当前页
$contstr="第一行GDSGVFGFDGFDGFDFDFDSF
第2行FDSAFDSFASDFF
第3行FDSAFDSAFDSAFSDAFDSFDSAF
第4行DSAFDSAFSDAF
第5行FDSAFDSFDSFDSFFDERRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR";// 文字内容,可从数据库中查询出
$listbyte=7; //每页显示字节数,正常情况下可设置为5000或其他
//##寻找文章分页点----------
$contlen=strlen($contstr);
$j=0; //总页数
$listat[0]=0;
$lookAt=0;
for($i=1;$i<$contlen/$listbyte+1;$i++){
if($lookAt<$listbyte)
$lookAt=$listbyte;
if($lookAt>$contlen){
$j++;
$listat[$j]=$contlen;
break;
}
$endAt=strpos($contstr,"\n",$lookAt); // \n
//如果余下的内容不足一页的1/5加到本页或找不到分页符则作一页处理
if($endAt>$contlen-$listbyte/5 or intval($endAt)<1){
$j++;
$listat[$j]=$contlen; ///
break;
}
else{
$j++;
$listat[$j]=$endAt;
$lookAt=$endAt+$listbyte;
}
}

//打印页码
$pagenum=$j;//总页
$page=intval($c_page);
if(empty($page) or $page<1 or $page>$pagenum) $page=1;
if($pagenum>1)
for($i=1;$i<$pagenum+1;$i++){echo "<a href='?page=$i'>$i 页</a> ";}

//输出当前页内容
$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;";
echo $cont;
?>

posted @ 2008-08-29 11:34  酷越  阅读(877)  评论(0编辑  收藏  举报