孤独求学人
php简单的文章分页代码
2010-3-6 杜世伟
<?php
/*
* 如果一篇文章内容较长(如40000字节的文章,且保存在一个字段中),可用以下代码进行分页显示
*本代码只对纯文本内容有效,首先按字节数分页,但是以\n为分页点的,不会将一段文字分到两页中。因此在符合字节数的条件下还需要有\n,如果没有则视 为一段话,不进行分页。
*
* \n在文本框中为回车
*/

$contstr="1111\n2222\n3333\n4444\n55550";// 文字内容,可从数据库中查询出
$listbyte=3; //每页显示字节数,正常情况下可设置为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);

//如果余下的内容不足一页的1/5加到本页或找不到分页符则作一页处理
if($endAt>$contlen-$listbyte/5 or intval($endAt)<1){
$j++;
$listat[$j]=$contlen;
break;
}
else{
$j++;
$listat[$j]=$endAt;
$lookAt=$endAt+$listbyte;
}
}

//END 以下是输出-------------

//打印页码
$pagenum=$j;
$page=intval($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'>第<b>$i</b>页</a>\n ";

//输出当前页内容
$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 "<b>[接<a href='?page=".($page-1)."'>上页</a>]</b><br>";
echo $cont;

?>