judev/php-htmltruncator

HTML 截断库,由 html_truncator rubygem 转移而来

1.2.2 2019-11-19 10:31 UTC

This package is not auto-updated.

Last update: 2024-09-24 11:40:30 UTC


README

Build Status

这是 html_truncator gem 的 PHP 版本,源代码位于 https://github.com/nono/HTML-Truncator

它将干净地截断 HTML 内容,在最适合的位置添加省略号或其他标记。如果需要解析非规范 HTML5,则可选支持 html5-php。这是因为 PHP 的 DOMDocument->loadHTML(或其底层的 libxml)无法识别 HTML5。

在截断过程中,HTML 将被加载到 DOMDocument 中。这可能会相对较慢且占用大量内存,因此您可能希望缓存截断后的输出。

强烈推荐使用 intlmbstring 扩展,以使国际文本的截断更加可预测。

如何使用它

HtmlTruncator\Truncator 类只有一个静态方法 truncate,带有 3 个参数:

  • 要截断的 HTML 格式化字符串
  • 要保留的单词数量(真正的单词、标签和属性不计入)
  • 一些选项,如省略号(可选,默认为 '…')。如果选项是字符串,则用作省略号

以及一个静态属性 $ellipsable_tags,它列出了可以包含省略号的标签(默认:p ol ul li div header article nav section footer aside dd dt dl)。

示例

一个简单的示例

Truncator::truncate("<p>Lorem ipsum dolor sit amet.</p>", 3);
# => "<p>Lorem ipsum dolor…</p>"

如果文本太短,无法截断,则不会对其进行修改

Truncator::truncate("<p>Lorem ipsum dolor sit amet.</p>", 5);
# => "<p>Lorem ipsum dolor sit amet.</p>"

如果您更喜欢,可以使用字符长度而不是单词长度

Truncator::truncate("<p>Lorem ipsum dolor sit amet.</p>", 12, array('length_in_chars' => true));
# => "<p>Lorem ipsum …</p>"

您可以根据需要自定义省略号

Truncator::truncate("<p>Lorem ipsum dolor sit amet.</p>", 3, " (truncated)");
# => "<p>Lorem ipsum dolor (truncated)</p>"

甚至在省略号中包含 HTML

Truncator::truncate("<p>Lorem ipsum dolor sit amet.</p>", 3, '<a href="/more-to-read">...</a>');
# => "<p>Lorem ipsum dolor<a href="/more-to-read">...</a></p>"

省略号放在正确的位置,在 <p> 内,而不是 <i>

Truncator::truncate("<p><i>Lorem ipsum dolor sit amet.</i></p>", 3);
# => "<p><i>Lorem ipsum dolor</i>…</p>"

您可以通过将其添加到 ellipsable_tags 来指示某个标签可以包含省略号

Truncator::$ellipsable_tags[] = "blockquote";
Truncator::truncate("<blockquote>Lorem ipsum dolor sit amet.</blockquote>", 3);
# => "<blockquote>Lorem ipsum dolor…</blockquote>"

致谢

这个 PHP 版本完全基于 Bruno Michel 的优秀 rubygem,引入的任何错误可能都是我的。

2013-07-04 由 Jude Venn 转移 judev@cuttlefish.com,在 MIT 许可证下发布