首页 >后端开发 >php教程 >如何在不破坏标签的情况下截断嵌入 HTML 的文本?

如何在不破坏标签的情况下截断嵌入 HTML 的文本?

Linda Hamilton
Linda Hamilton原创
2024-11-10 04:37:02811浏览

How to Truncate Text with Embedded HTML Without Breaking Tags?

截断嵌入 HTML 的文本

处理包含 HTML 标签的文本时,必须确保在截断期间进行正确处理,以避免破坏标签或显示无效内容。以下是如何在保持 HTML 完整性的同时截断文本:

PHP 实现:

以下 PHP 函数使用正则表达式来解析 HTML 并维护一个打开的堆栈标签:

function printTruncated($maxLength, $html, $isUtf8 = true) { ... }

此函数扫描 HTML 输入,识别标签和字符实体。它确保标签正确关闭并将字符实体计为单个字符。这种方法可确保截断发生在有效点,而不会破坏任何 HTML 结构。

用法示例:

printTruncated(10, '<b><Hello&amp;gt;</b> <img src="world.png" alt="" /> world!'); // Outputs: 'Hello<b></b> <img src="world.png" alt="" />'

Python 实现:

像 BeautifulSoup 这样的 HTML 解析库可以在 Python 中协助完成此任务:

from bs4 import BeautifulSoup, NavigableString

def truncate_html(text, max_length):
    soup = BeautifulSoup(text, 'lxml')
    truncated = soup.new_tag("div")
    tail = soup.new_string('')

    node_len = 0
    for node in soup.children:
        if isinstance(node, NavigableString):
            node_len += len(node)
            if node_len <= max_length:
                truncated.append(node)
            else:
                tail.append(node.string[:max_length - node_len])
                break
        else:
            node_len += len(str(node))
            truncated.append(node)
        
    return str(truncated) + str(tail)

示例用法:

print(truncate_html('<b><Hello&amp;gt;</b> <img src="world.png" alt="" /> world!', 10)) # Outputs: 'Hello<b></b> <img src="world.png" alt="" />'

结论:

通过在截断期间解析和处理 HTML 标签,这些方法可确保生成的文本保持其预期的结构和内容有效性。

以上是如何在不破坏标签的情况下截断嵌入 HTML 的文本?的详细内容。更多信息请关注PHP中文网其他相关文章!

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