php实现长文档分页
PHP 实现长文档分页的方法
使用字符串分割函数
可以利用 str_split 或 mb_str_split 函数将长文本按字符数分割成数组,再根据每页的字符数进行分页。适用于纯文本内容。
$text = "长文档内容...";
$perPage = 2000; // 每页字符数
$pages = mb_str_split($text, $perPage, 'UTF-8');
按段落分页
如果文档有明确的段落分隔(如换行符),可以通过 explode 分割段落,再按段落数量分页。
$paragraphs = explode("\n", $text);
$perPage = 5; // 每页段落数
$pages = array_chunk($paragraphs, $perPage);
使用第三方库(如 TCPDF)
对于需要生成 PDF 或精确控制分页的场景,可以使用 TCPDF 或 FPDF 库。这些库支持自动分页和格式处理。
require_once('tcpdf/tcpdf.php');
$pdf = new TCPDF();
$pdf->AddPage();
$pdf->WriteHTML($longText);
$pdf->Output('document.pdf', 'I');
基于 DOM 的分页
如果文档是 HTML 格式,可以用 DOMDocument 解析并分块处理,避免破坏标签结构。
$dom = new DOMDocument();
$dom->loadHTML($htmlContent);
$elements = $dom->getElementsByTagName('p');
$perPage = 3;
$pages = array_chunk(iterator_to_array($elements), $perPage);
数据库分页查询
若文档内容存储在数据库中,直接通过 SQL 的 LIMIT 和 OFFSET 实现分页更高效。
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;
$query = "SELECT content FROM documents LIMIT $offset, $perPage";
分页逻辑封装
将分页逻辑封装成可复用的函数,支持动态调整每页大小和当前页。
function paginateText($text, $perPage, $page) {
$totalChars = mb_strlen($text, 'UTF-8');
$totalPages = ceil($totalChars / $perPage);
$start = ($page - 1) * $perPage;
return mb_substr($text, $start, $perPage, 'UTF-8');
}
前端分页结合
后端返回全部内容,前端通过 JavaScript 实现分页展示,减少服务器压力。
// 前端示例代码
const paginate = (text, charsPerPage) => {
const pages = [];
for (let i = 0; i < text.length; i += charsPerPage) {
pages.push(text.slice(i, i + charsPerPage));
}
return pages;
};






