[英]Adding html break to each line in Ruby
我在这里基本上有一个简短的 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 %>
您可能会注意到该数组由页面名称 + 其他内容组成。 我认为一个中断标签就足够了,但 Ruby 不喜欢这个并给出一个错误的 URI 异常。
有没有人对如何在每个站点声明后换行有任何想法。 在 HTML 声明中? 在数组中? 任何和所有的帮助表示赞赏。
由于您正在尝试 output 一个数组,因此它使用换行符\n
而不是 HTML 中断将它们连接起来。 您可以通过加入br
标签来强制 HTML 中断:
<%= @sites.join("<br />") %>
在 Rails 3 中,您可能需要关闭 escaping:
<%= raw(@sites.join("<br />")) %>
我不熟悉 Amemone,但我假设page.url
返回URI
class 的实例。 您需要先将 url 转换为字符串( page.url.to_s
),然后再附加到它。
不过,我可能会将 url 保留为 URI 实例,并在打印时对其进行格式化。 将您的after_crawl
方法更改为{ puts @sites.join("\n") }
( URI
实例将自动转换为字符串)。
可能最安全的做法是在 ERB 中手动进行:
<% @sites.each do |site| %>
<%= site %><br>
<% end %>
或者在 Rails 2 中:
<% @sites.each do |site| %>
<%=h site %><br>
<% end %>
这样您就不必担心 HTML 可能会发出@sites
条目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.