通过标记保留截断包含 HTML 的文本
挑战
截断带有嵌入 HTML 标记的文本通常会导致标签不完整或错误关闭。如何在保留 HTML 结构的同时有效截断文本?
解决方案:标签感知截断
为了保留 HTML 结构,我们需要跟踪和管理打开和关闭标签。这是一个 PHP 实现:
function printTruncated($maxLength, $html, $isUtf8 = true) { $printedLength = 0; $position = 0; $tags = []; $re = $isUtf8 ? '{</?([a-z]+)[^>]*>|&#?[a-zA-Z0-9]+;|[\x80-\xFF][\x80-\xBF]*}' : '{</?([a-z]+)[^>]*>|&#?[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>&lt;Hello&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>&#20;w\xC3\xB8rld!</em>");
注意:
该函数假设 UTF- 8 编码。对于其他编码,在截断之前使用 mb_convert_encoding 转换为 UTF-8。
以上是如何在保留标签结构的同时截断 HTML 文本?的详细内容。更多信息请关注PHP中文网其他相关文章!