0

0

长文章 自动/手动 分页类

php中文网

php中文网

发布时间:2016-06-08 17:32:48

|

1295人浏览过

|

来源于php中文网

原创

/*
 * 长文章分页类
 * @package cutpage
 * @author  yytcpt(无影)
 * @version 2008-03-27
 * @copyrigth http://www.d5s.cn/
 */
 class cutpage{
  var $pagestr;  //被切分的内容
  var $pagearr;  //被切分文字的数组格式
  var $sum_word;  //总字数(UTF-8格式的中文字符也包括)
  var $sum_page;  //总页数
  var $page_word;  //一页多少字
  var $cut_tag;  //自动分页符
  var $cut_custom; //手动分页符
  var $ipage;   //当前切分的页数,第几页
  var $url;
  function __construct(){
   $this->page_word = 1000;
   $this->cut_tag = array("", "", "

", "
", "”。", "。", ".", "!", "……", "?", ",");
   $this->cut_custom = "{nextpage}";
   $tmp_page = intval(trim($_GET["ipage"]));
   $this->ipage = $tmp_page>1?$tmp_page:1;
  }
  //统计总字数
  function get_page_word(){
   $this->sum_word = $this->strlen_utf8($this->pagestr);
   return $this->sum_word;
  }
  /* 统计UTF-8编码的字符长度
   * 一个中文,一个英文都为一个字
   */
  function strlen_utf8($str){
     $i = 0;
     $count = 0;
     $len = strlen ($str);
     while ($i       $chr = ord ($str[$i]);
      $count++;
      $i++;
      if ($i >= $len)
       break;
      if ($chr & 0x80){
       $chr        while ($chr & 0x80) {
        $i++;
        $chr        }
      }
     }
     return $count;
  }
  //设置自动分页符号
  function set_cut_tag($tag_arr=array()){
   $this->cut_tag = $tag_arr;
  }
  //设置手动分页符
  function set_cut_custom($cut_str){
   $this->cut_custom = $cut_str;
  }
  function show_cpage($ipage=0){
   $this->cut_str();
   $ipage = $ipage ? $ipage:$this->ipage;
   return $this->pagearr[$ipage];
  }
  function cut_str(){
   $str_len_word = strlen($this->pagestr);  //获取使用strlen得到的字符总数
   $i = 0;
   if ($str_len_wordpage_word){ //如果总字数小于一页显示字数
    $page_arr[$i] = $this->pagestr;
   }else{
    if (strpos($this->pagestr, $this->cut_custom)){
     $page_arr = explode($this->cut_custom, $this->pagestr);
    }else{
     $str_first = substr($this->pagestr, 0, $this->page_word); //0-page_word个文字 cutStr为func.global中的函数
     foreach ($this->cut_tag as $v){
      $cut_start = strrpos($str_first, $v);  //逆向查找第一个分页符的位置
      if ($cut_start){
       $page_arr[$i++] = substr($this->pagestr, 0, $cut_start).$v;
       $cut_start = $cut_start + strlen($v);
       break;
      }
     }
     if (($cut_start+$this->page_word)>=$str_len_word){ //如果超过总字数
      $page_arr[$i++] = substr($this->pagestr, $cut_start, $this->page_word);
     }else{
      while (($cut_start+$this->page_word)        foreach ($this->cut_tag as $v){
        $str_tmp = substr($this->pagestr, $cut_start, $this->page_word);  //取第cut_start个字后的page_word个字符
        $cut_tmp = strrpos($str_tmp, $v);  //找出从第cut_start个字之后,page_word个字之间,逆向查找第一个分页符的位置
        if ($cut_tmp){
         $page_arr[$i++] = substr($str_tmp, 0, $cut_tmp).$v;
         $cut_start = $cut_start + $cut_tmp + strlen($v);
         break;
        }
       } 
      }
      if (($cut_start+$this->page_word)>$str_len_word){
       $page_arr[$i++] = substr($this->pagestr, $cut_start, $this->page_word);
      }
     }
    }
   }
   $this->sum_page = count($page_arr);  //总页数
   $this->pagearr = $page_arr;
  }
  //显示上一条,下一条
  function show_prv_next(){
   $this->set_url();
   if ($this->sum_page>1 and $this->ipagesum_page){
    $str = "下一页 ";
   }
   if ($this->sum_page>1 and $this->ipage>1){
    $str.= "上一页";
   }
   return $str;
  }
  function show_page_select(){
   if ($this->sum_page>1){
    $str = "   ";
   }
   return $str;
  }
  function show_page_select_wap(){
   if ($this->sum_page>1){
    $str = "";
   }
   return $str;
  }
  function set_url(){
   parse_str($_SERVER["QUERY_STRING"], $arr_url);
   unset($arr_url["ipage"]);
   if (empty($arr_url)){
    $str = "ipage=";
   }else{
    $str = http_build_query($arr_url)."&ipage=";
   }
   $this->url = "http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?".$str;
  }
 }
?>

 

逍遥内容管理系统(Carefree CMS)1.3.0
逍遥内容管理系统(Carefree CMS)1.3.0

系统简介逍遥内容管理系统(CarefreeCMS)是一款功能强大、易于使用的内容管理平台,采用前后端分离架构,支持静态页面生成,适用于个人博客、企业网站、新闻媒体等各类内容发布场景。核心特性1、模板套装系统 - 支持多套模板自由切换,快速定制网站风格2、静态页面生成 - 一键生成纯静态HTML页面,访问速度快,SEO友好3、文章管理 - 支持富文本编辑、草稿保存、文章属性标记、自动提取SEO4、全

下载

如果您加了新功能,或者是有改进,请与大家一起分享。

长文章分页类,可以手工指定分页符,也可以让程序自动分页。

实例代码:请以UTF-8的文件编码进行测试。

代码:
    include('cutpage.php');
    header("content-type:text/html;charset=utf-8");//设置页面编码
    //自定义的长文章字符串,可以包含 html 代码,若字符串中有手动分页符 {nextpage} 则优先按手动分页符进行分页
    $content = file_get_contents('text.txt');
    $ipage = $_GET["ipage"]? intval($_GET["ipage"]):1;
    $CP = new cutpage();
    $CP->pagestr = $content;
    $CP->cut_str();
    echo $CP->pagearr[$ipage-1]."
";
    echo $CP->show_prv_next();
?>

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

22

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

24

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

99

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

132

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

15

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

61

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

63

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 13.2万人学习

Pandas 教程
Pandas 教程

共15课时 | 1.0万人学习

C# 教程
C# 教程

共94课时 | 7.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号