在Ruby中为每一行添加html break

时间:2011-06-28 17:15:54

标签: html ruby-on-rails ruby line-breaks web-crawler

我在这里基本上有一个简短的ruby脚本(我刚开始学习),它的目的是蜘蛛爬行一个网站并返回它找到的所有链接。

@sites = Array.new
Anemone.crawl("http://www.nemecisco.com/") do |anemone|
  anemone.on_every_page do |page|
    puts page.url
    @sites<<page.url+""  #heres where i add something to give it a line break i think
  end
  anemone.after_crawl { puts @sites }
end
end

它做得很好,但是当它被输出到HTML时,它们都聚集在一起,因为它试图将它们卡在一行上。 HTML只是ruby脚本标记内的数组。

<%= @sites %>

您可能会注意到该数组由页面名称+其他内容组成。我认为一个break标记就足够了,但Ruby不喜欢这个并且提供了一个糟糕的URI异常。

有没有人知道如何在每个网站声明后放置换行符。在HTML声明中?在阵列?任何和所有帮助表示赞赏。

3 个答案:

答案 0 :(得分:2)

由于您正在尝试输出数组,因此它使用换行符\n而不是HTML中断来加入它们。您可以通过加入br代码来强制执行HTML中断:

<%= @sites.join("<br />") %>

在Rails 3中,您可能需要关闭转义:

<%= raw(@sites.join("<br />")) %>

答案 1 :(得分:0)

我不熟悉Amemone,但我假设page.url返回URI类的实例。您需要在追加它之前将网址转换为字符串(page.url.to_s)。

我可能会将URL保留为URI实例,并在打印时格式化它们。将您的after_crawl方法更改为{ puts @sites.join("\n") }URI个实例将自动转换为字符串。

答案 2 :(得分:0)

最安全的做法可能是在ERB中手动完成:

<% @sites.each do |site| %>
    <%= site %><br>
<% end %>

或者在Rails 2中:

<% @sites.each do |site| %>
    <%=h site %><br>
<% end %>

这样您就不必担心@sites条目可能会出现HTML问题。