judev / php-htmltruncator
HTML 截断库,由 html_truncator rubygem 转移而来
Requires
- php: >=5.6.0
- masterminds/html5: ^2.0
Requires (Dev)
- phpunit/phpunit: 4.4.*
Suggests
- ext-intl: *
- ext-mbstring: *
README
这是 html_truncator gem 的 PHP 版本,源代码位于 https://github.com/nono/HTML-Truncator。
它将干净地截断 HTML 内容,在最适合的位置添加省略号或其他标记。如果需要解析非规范 HTML5,则可选支持 html5-php。这是因为 PHP 的 DOMDocument->loadHTML(或其底层的 libxml)无法识别 HTML5。
在截断过程中,HTML 将被加载到 DOMDocument 中。这可能会相对较慢且占用大量内存,因此您可能希望缓存截断后的输出。
强烈推荐使用 intl 和 mbstring 扩展,以使国际文本的截断更加可预测。
如何使用它
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 许可证下发布