1.0rc 试验功能 -- Textile
自动生成文章简介 & Rubyful Soup
GemBlog 1.0rc 中将要取消的东西用过 WP 的人都知道 WP 有一个自动生成文章简介的功能,在文章中插入 <!--more--> 标签,所有之前的内容都会自动作为文章简介,非常方便,而且这样文章的列表界面也不会光秃秃的只有文字。
晚上折腾了一下,在 GemBlog 上也实现了,原理很简单,本来我也想是三下五除二的事情,结果让我郁闷了一下,等下再说,这是完成后的样子:

上面的文章没有自动生成简介,下面的文章自动把文章前面的部分当作简介,这样页面看上去丰富了很多~ 
和 WP 一样,也是用 <!--more--> 当作分隔符,之前的内容当作简介,不过这就涉及到一个 HTML 的截断问题,用户插入 <!--more--> 的位置不能确定,假如只是截断的话,有可能会把一些 HTML 标签拦腰咔嚓,这样简介里面就会留着半个没有关闭的 HTML 标签,在文章列表显示的话,会把页面搞得一团糟。
解决的办法就是通过程序自动闭合简介中没有闭合的 HTML 标签,去看了一下 WP,它也是这样处理的,到网上搜了一下,没有发现比较好的算法,最后发现 RubyfulSoup 这个库,解决的问题~
RubyfulSoup 是一个专门用来快速处理 HTML 和 XML 的 Ruby 库,对错误的 HTML 和 HTML 有很强的包容性,还可以对错误进行清理~
用法很简单:
-
require 'rubyful_soup'
-
-
invalid_html = <<END
-
<div>
-
<ul>
-
<li><a href="http://www.google.com">Google
-
END
-
-
soup = BeautifulSoup.new(invalid_html)
-
puts soup.prettify
-
-
# <div>
-
# <ul>
-
# <li>
-
# <a href="http://www.google.com" google="">Google
-
# </a>
-
# </li>
-
# </ul>
-
# </div>
很不错吧,只需要一个 prettify 方法,没有闭合的标签都正确闭合了~
本来一切顺利,结果让我郁闷的是,在单独的程序中测试通过,放在 Blog 中就是无法运行,卡在 BeautifulSoup.new 上,报告参数错误,百思不得其解,郁闷了很久……最后发现…… 原来是命名冲突~~!
RubyfulSoup 里面有个 Tag 类,代表 HTML 或者 XML 标签;Blog 的标签插件: Acts As Taggable 的类也叫 Tag …… RubyfulSoup 找错了类,自然出错了……
没办法,把 RubyfulSoup 的 Tag 改名了,总算一切正常了……
如果你也没法在你的 Rails 网站中用 RubyfulSoup 的话,先检查下命名冲突吧~

-
hello world
。 谢谢上面的应该是自动识别了
<UL>
<LI>
hello world
</LI>
</UL
或者
<UL>
<LI>
hello world
</LI>
</U
galeki
可以处理~
你好,在使用过程中遇到两个问题:
一是,
这个可以通过
转换解决掉
二是
这个问题,您是怎么解决的?
galeki
确实有 %nbsp 这个问题,应该是他库的问题,暂时也就只能这样解决了~
strong 标签的问题我没有遇到,测试了几个也成功了,能否给个导致错误的例子?
galeki
给个代码吧,没听明白你说的是什么样子
invalid_html = <<END
<div>
<strong><a href="http://www.google.com">Google
END
经过下面的处理
soup = BeautifulSoup.new(invalid_html)
puts soup.prettify
生成结果是
<div>
<strong><a href="http://www.google.com">Google</a>
</div>
而不是
<div>
<strong><a href="http://www.google.com">Google</a></strong>
</div>
少了一个strong结束标签
galeki
我拿这个数据试了一下,可以正确闭合 strong 标签