Today's the day

向软件大牛炫耀我会焊单片机,向硬件大牛炫耀我会写 Rails,向软硬件大牛炫耀我生物,向软硬件生物大牛炫耀我会折腾期货 -_-bbb

1.0rc 试验功能 -- Textile
GemBlog 1.0rc 中将要取消的东西

自动生成文章简介 & Rubyful Soup

galeki posted @ 2007年12月01日 18:24 in Chito with tags -chito- , 8515 阅读

用过 WP 的人都知道 WP 有一个自动生成文章简介的功能,在文章中插入 <!--more--> 标签,所有之前的内容都会自动作为文章简介,非常方便,而且这样文章的列表界面也不会光秃秃的只有文字。

 晚上折腾了一下,在 GemBlog 上也实现了,原理很简单,本来我也想是三下五除二的事情,结果让我郁闷了一下,等下再说,这是完成后的样子:

上面的文章没有自动生成简介,下面的文章自动把文章前面的部分当作简介,这样页面看上去丰富了很多~

和 WP 一样,也是用 <!--more--> 当作分隔符,之前的内容当作简介,不过这就涉及到一个 HTML 的截断问题,用户插入 <!--more--> 的位置不能确定,假如只是截断的话,有可能会把一些 HTML 标签拦腰咔嚓,这样简介里面就会留着半个没有关闭的 HTML 标签,在文章列表显示的话,会把页面搞得一团糟。

解决的办法就是通过程序自动闭合简介中没有闭合的 HTML 标签,去看了一下 WP,它也是这样处理的,到网上搜了一下,没有发现比较好的算法,最后发现 RubyfulSoup 这个库,解决的问题~

RubyfulSoup 是一个专门用来快速处理 HTML 和 XML 的 Ruby 库,对错误的 HTML 和 HTML 有很强的包容性,还可以对错误进行清理~

用法很简单:

  1. require 'rubyful_soup'
  2.  
  3. invalid_html  = <<END
  4. <div>
  5.    <ul>
  6.        <li><a href="http://www.google.com">Google
  7. END
  8.  
  9. soup = BeautifulSoup.new(invalid_html)
  10. puts soup.prettify
  11.  
  12. #  <div>
  13. #   <ul>
  14. #    <li>
  15. #     <a href="http://www.google.com" google="">Google
  16. #     </a>
  17. #    </li>
  18. #   </ul>
  19. #  </div>

很不错吧,只需要一个 prettify 方法,没有闭合的标签都正确闭合了~

本来一切顺利,结果让我郁闷的是,在单独的程序中测试通过,放在 Blog 中就是无法运行,卡在 BeautifulSoup.new 上,报告参数错误,百思不得其解,郁闷了很久……最后发现…… 原来是命名冲突~~!

RubyfulSoup 里面有个 Tag 类,代表 HTML 或者 XML 标签;Blog 的标签插件: Acts As Taggable 的类也叫  Tag …… RubyfulSoup 找错了类,自然出错了……

没办法,把 RubyfulSoup 的 Tag 改名了,总算一切正常了……

如果你也没法在你的 Rails 网站中用 RubyfulSoup 的话,先检查下命名冲突吧~

 

weskycn 说:
2008年4月18日 18:18 你好,我想问一下,RubyfulSoup能自动处理类似这种格式的吗?
  • hello world
。 谢谢
weskycn 说:
2008年4月18日 18:23

 上面的应该是自动识别了

就是类似这种形式的:


<UL>
  <LI>
   hello world
  </LI>
</UL
或者

<UL>

  <LI>
   hello world
  </LI>
</U
weskycn 说:
2008年4月25日 21:27

你好,在使用过程中遇到两个问题:

一是,

&nbsp; 会被转换成 %nbsp

这个可以通过

gsub(/%nbsp/, "&nbsp;")

转换解决掉

二是

<strong></strong>标签如果不齐的话,不能够自动补齐,整个页面就都是粗体了

这个问题,您是怎么解决的?

Avatar_small
galeki 说:
2008年4月26日 02:43

确实有 %nbsp 这个问题,应该是他库的问题,暂时也就只能这样解决了~

strong 标签的问题我没有遇到,测试了几个也成功了,能否给个导致错误的例子?

weskycn 说:
2008年4月26日 03:44 就是两个 strong标签,如果被截段的话,就不能把另外一半补回来,改成 b标签也一样, 表现为从被截断的位置往下,所有字体都粗体了,呵呵,你可以拿一些代码测试下。
Avatar_small
galeki 说:
2008年4月26日 05:43

给个代码吧,没听明白你说的是什么样子


weskycn 说:
2008年4月26日 21:44
require 'rubyful_soup'
 
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结束标签

Avatar_small
galeki 说:
2008年4月26日 23:39

我拿这个数据试了一下,可以正确闭合 strong 标签

weskycn 说:
2008年4月28日 00:20 哦,我再试试,
Anonymous 说:
2022年5月29日 15:39

I invite you to the page where you can read       with interesting information on similar topics. voice mail service

Anonymous 说:
2022年6月05日 01:21

Your blogs further more each else volume is so entertaining further serviceable It appoints me befall retreat encore. I will instantly grab your rss feed to stay informed of any updates. Tampa Exterminator

Anonymous 说:
2022年6月05日 01:22

There is so much in this article that I would never have thought of on my own. Your content gives readers things to think about in an interesting way. Orlando Exterminator

Anonymous 说:
2022年6月05日 01:23

I personally use them exclusively high-quality elements : you will notice these folks during: DeLand Brush Clearing

Anonymous 说:
2022年7月11日 15:48

Initial You got a awesome blog .I determination be involved in plus uniform minutes. i view you got truly very functional matters , i determination be always checking your blog blesss. فني تكييف

Anonymous 说:
2022年7月11日 15:49

Your texts on this subject are correct, see how I wrote        this site is really very good. فني كهربائي منازل

Anonymous 说:
2022年7月11日 15:49

Acknowledges for penmanship such a worthy column, I stumbled beside your blog besides predict a handful advise. I want your tone of manuscript... تصليح طباخات

Anonymous 说:
2022年7月11日 15:50

Why do only so much written on this subject? Here you see more.  مكافحة قوارض

Anonymous 说:
2022年7月30日 12:33

Can nicely write on similar topics! Welcome to      here you'll find out how it should look. Pollen Collection Showflat

Anonymous 说:
2022年7月30日 12:35

There is so much in this article that I would never have thought of on my own. Your content gives readers things to think about in an interesting way. Lentor Modern Showflat

Anonymous 说:
2022年8月06日 01:26

Listed here you'll learn it is important, them offers the link in an helpful webpage: clothing

Anonymous 说:
2022年8月10日 00:20

These things are very important, good think so - I think so too...  https://puffingbird.com/

Anonymous 说:
2022年8月15日 12:30

I invite you to the page where     see how much we have in common. lsd sheets for sale

Anonymous 说:
2022年8月17日 16:03

I exploit solely premium quality products -- you will observe these individuals on: Male Enhancement pill

Anonymous 说:
2022年8月21日 00:58

So it is interesting and very good written and see what they think about other people.  royalgreen

Anonymous 说:
2022年8月21日 00:59

This is very interesting content! I have thoroughly enjoyed reading your points and have come to the conclusion that you are right about many of them. You are great. sofa entsorgen berlin

Anonymous 说:
2022年8月22日 19:42

These you will then see the most important thing, the application provides you a website a powerful important internet page: 남자확대수술

Anonymous 说:
2022年8月24日 22:31

Such sites are important because they provide a large dose of useful information ...  fluyezcambios

Anonymous 说:
2022年8月27日 18:00

I should say only that its awesome! The blog is informational and always produce amazing things. 밤알바

Anonymous 说:
2022年8月28日 01:13

During this website, you will see this shape, i highly recommend you learn this review. north gaia singapore

Anonymous 说:
2022年8月28日 01:14

I am interested in such topics so I will address       page where it is cool described. copen grand singapore

Anonymous 说:
2022年8月28日 01:14

Great info! I recently came across your blog and have been reading along. I thought I would leave my first comment. I don’t know what to say except that I have. one bernam price

Anonymous 说:
2022年8月28日 01:14

I personally use them exclusively high-quality elements : you will notice these folks during: the landmark price

Anonymous 说:
2022年8月28日 01:15

It is very good, but look at the information at this address.  sceneca residence floor plan

Anonymous 说:
2022年8月28日 01:15

Hi there, I discovered your blog per Google bit searching for such kinda educational advise moreover your inform beholds very remarkable for me. lentor modern singapore

Anonymous 说:
2022年9月06日 13:03

Can nicely write on similar topics! Welcome to      here you'll find out how it should look. 먹튀

Anonymous 说:
2022年9月09日 13:42

Beaver says I also have such interest, you can read my profile here:  etrader license

Anonymous 说:
2022年9月23日 14:00

I just thought it may be an idea to post incase anyone else was having problems researching but I am a little unsure if I am allowed to put names and addresses on here. Coin Khakhra


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter