首页  >  文章  >  后端开发  >  如何在保留标签结构的同时截断 HTML 文本?

如何在保留标签结构的同时截断 HTML 文本?

Linda Hamilton
Linda Hamilton原创
2024-11-13 00:04:01974浏览

How to Truncate HTML Text while Preserving Tag Structure?

通过标记保留截断包含 HTML 的文本

挑战

截断带有嵌入 HTML 标记的文本通常会导致标签不完整或错误关闭。如何在保留 HTML 结构的同时有效截断文本?

解决方案:标签感知截断

为了保留 HTML 结构,我们需要跟踪和管理打开和关闭标签。这是一个 PHP 实现:

function printTruncated($maxLength, $html, $isUtf8 = true)
{
    $printedLength = 0;
    $position = 0;
    $tags = [];

    $re = $isUtf8
        ? '{</?([a-z]+)[^>]*>|&amp;#?[a-zA-Z0-9]+;|[\x80-\xFF][\x80-\xBF]*}'
        : '{</?([a-z]+)[^>]*>|&amp;#?[a-zA-Z0-9]+;}';

    while ($printedLength < $maxLength && preg_match($re, $html, $match, PREG_OFFSET_CAPTURE, $position))
    {
        list($tag, $tagPosition) = $match[0];

        $str = substr($html, $position, $tagPosition - $position);
        
        # More code...
        
        # Continue after the tag.
        $position = $tagPosition + strlen($tag);
    }

    # More code...
}

示例用法

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

printTruncated(10, '<table><tr><td>Heck, </td><td>throw</td></tr><tr><td>in a</td><td>table</td></tr></table>');

printTruncated(10, "<em><b>Hello</b>&amp;#20;w\xC3\xB8rld!</em>");

注意:

该函数假设 UTF- 8 编码。对于其他编码,在截断之前使用 mb_convert_encoding 转换为 UTF-8。

以上是如何在保留标签结构的同时截断 HTML 文本?的详细内容。更多信息请关注PHP中文网其他相关文章!

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