繁体   English   中英

在 Ruby 中的每一行添加 html 中断

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM