php截取html文章并不破坏html文档结构示例代码

代码语言:php

所属分类:其他

代码描述:php截取html文章并不破坏html文档结构示例代码,一段html文章,php截取部分,返回的依然是部分html文档

代码标签: php 截取 html 文章 不破坏 html 文档 结构 示例 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<?php

function truncate_html($html, $fraction) {
    $doc = new DOMDocument();
    @$doc->loadHTML('<?xml encoding="utf-8" ?>' . $html); // 防止HTML解析错误
    $xpath = new DOMXPath($doc);
    $body = $xpath->query('//body')->item(0);

    // 获取总字符数
    $total_length = mb_strlen(strip_tags($html));
    $target_length = ceil($total_length * $fraction);

    // 截取的HTML片段
    $truncated_html = '';
    $current_length = 0;

    foreach ($body->childNodes as $node) {
        $node_length = strlen(strip_tags($doc->saveHTML($node)));

        if ($current_length + $node_length > $target_length) {
            // 如果当前节点超过目标长度,则需要部分截取
            $remaining_length = $target_length - $current_length;
            $truncated_html .= truncate_node($doc, $node, $remaining_length);
            break;
        } else {
            // 否则,完全包含当前节点
            $truncated_html .= $doc->saveHTML($node);
            $current_length += $node_length;
        }
    }

    return $truncated_html;
}

function truncate_node($doc, $node, $length) {
    $truncated = '';
    if ($node->nodeType == XML_TEXT_NODE) {
        // 如果是文本节点,直接截取
       $truncated = mb_substr($node->textContent, 0, $length, 'UTF-8&.........完整代码请登录后点击上方下载按钮下载查看

网友评论0