PHP语言之长文章自动/手动分页类
小标 2019-01-15 来源 : 阅读 815 评论 0

摘要:本文主要向大家介绍了PHP语言之长文章自动/手动分页类,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

本文主要向大家介绍了PHP语言之长文章自动/手动分页类,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

''  
/*
 * 长文章分页类
 * @package cutpage
 * @author  yytcpt(无影)
 * @version 2008-03-27
 * @copyrigth //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 < $len){
      $chr = ord ($str[$i]);
      $count++;
      $i++;
      if ($i >= $len)
       break;
      if ($chr & 0x80){
       $chr <<= 1;
       while ($chr & 0x80) {
        $i++;
        $chr <<= 1;
       }
      }
     }
     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_word<=$this->page_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)<$str_len_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->ipage<$this->sum_page){
    $str = "下一页 ";
   }
   if ($this->sum_page>1 and $this->ipage>1){
    $str.= "上一页";
   }
   return $str;
  }
  function show_page_select(){
   if ($this->sum_page>1){
    $str = "   ";
    for ($i=1; $i<=$this->sum_page; $i++){
     $str.= "ipage)==$i ? " selected='selected'":"").">第".$i."页";
    }
    $str.= "";
   }
   return $str;
  }
  function show_page_select_wap(){
   if ($this->sum_page>1){
    $str = "";
    for ($i=1; $i<=$this->sum_page; $i++){
     $str.= "第".$i."节";
    }
    $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 = "//".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?".$str;
  }
 }
?>
 
如果您加了新功能,或者是有改进,请与大家一起分享。

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

实例代码:请以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();
?>    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言PHP频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程