Gem 有什么好用的 HTML 截断 gem 推荐吗?

yiming · 2014年06月16日 · 最后由 yiming 回复于 2014年06月17日 · 2278 次阅读

Hi, 我想把一段 HTML 文本做截断处理:达到规定字数上限后,对文本截断,但不破坏掉标签。各位有好又快的 gem 推荐吗?其实我自己有思路啦:先做深度优先遍历,累计文本字符数,最后把其他节点删掉。但还想偷懒看看。。。

放狗搜了一圈,有如下几个:

前两个用的人比较多,最后那个我看他有做 benchmark,所以也想考虑。。。

我的使用场景是在 Jekyll 里自动把 post 截断后做摘要。嗯,就是这样。

Update:

再三考虑了一下我的需求:

  1. 能做任意长度截断
  2. 能保留 HTML 标签
  3. 可以摒除一些不适合在摘要里出现的标签,比如 table, hr, iframe, audio, video, img, pre

最后选了 truncato。

并且我给自动摘要做成了配置项,当没有开启时,会找 Jekyll 自带的 excerpt 变量(这货就是给写文章的同学手动去确定截断位置的)。。。如果他太懒,可以把自动截断选项开起来。。。

https://github.com/nono/HTML-Truncator 非常不错,我用它来摘要我的博客内容,效果很好。

例子:wblog

#1 楼 @lyfi2003 看了一下第三个 repo 给出的 benchmark 结果,不是太敢用那。

#2 楼 @yiming 4M 的数据那得是多大。看实际的需求情况,对于一般的页面应该是没问题。

不熟 jeklly, 不过这种应该是预制好的 html 或者是依赖 cache 吧,处理速度慢有什么好害怕的。

我记得 Jekyll 本身提供摘要啊。

#5 楼 @Rei 它的摘要是以摘要符号来的,默认是空行。但第一段很长很长的话就不理想了。如果换其他摘要符,手动指定摘要结束位置不是我希望的。liquid 有标准的 truncate filter,但那会破坏标签。。。

#6 楼 @yiming 如果需要精确摘要,我会在 yaml 里面加个字段直接指定摘要,还可以指定封面图之类的。

推荐像 wordpress 那样增加简介字段。简介内容还可以是对内容的总结什么的,有时候截取并一定合适。 我之前用 css 来着。

#7 楼 @Rei 嗯,这样比较稳妥。我这里主要考虑默认行为。即使没有这些设定也希望自动处理的结果能让人接受。

#8 楼 @xiaogui 我在模板里自定义了 description 字段,一是方便在 meta 里加,二是做摘录用于显示。只是担心用的同学懒得去填。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号