0

我有一个自动报告工具(corp Intranet),管理员有几个文本区域框可以为电子邮件正文的不同部分输入一些文本。

我想做的是解析文本区域的内容并用链接标签包装任何超链接(所以当报告出来时,会有链接而不是文本网址)。

有没有一种简单的方法来做这样的事情,而不想办法解析文本以在找到的周围添加链接标签(['http:','https:','ftp:] TO the first SPACE after)?

谢谢你!Ruby 1.87,Rails 2.3.5

4

2 回答 2

0

有很多方法可以实现你的目标。一种方法是使用正则表达式。如果您从未听说过正则表达式,那么这个wikipedia 条目应该能让您快速上手。

例如:

content_string = "Blah ablal blabla lbal blah blaha http://www.google.com/ adsf dasd dadf dfasdf dadf sdfasdf dadf dfaksjdf kjdfasdf http://www.apple.com/ blah blah blah."
content_string.split(/\s+/).find_all { |u| u =~ /^https?:/ }

哪个会返回:["http://www.google.com/", "http://www.apple.com/"]

现在,对于问题的后半部分,您将使用上面返回的数组将文本链接替换为超链接。

links = ["http://www.google.com/", "http://www.apple.com/"]
links.each do |l|
  content_string.gsub!(l, "<a href='#{l}'>#{l}</a>")
end

content_string现在将更新以包含所有 http/https URL 的 HTML 超链接。

正如我之前提到的,有很多方法可以解决这个问题 - 查找 URL,您还可以执行以下操作:

require 'uri'
URI.extract(content_string, ['http', 'https'])

我希望这可以帮助你。

于 2012-05-17T04:47:53.293 回答
0

做一个帮手:

def make_urls(text)
  urls = %r{(?:https?|ftp|mailto)://\S+}i
  html_text = text.gsub urls, '<a href="\0">\0</a>'
  html_text
end

在视图上只需调用此函数,您将获得预期的输出。像 :

irb(main):001:0> string = 'here is a link: http://google.com'
=> "here is a link: http://google.com"
irb(main):002:0> urls = %r{(?:https?|ftp|mailto)://\S+}i
=> /(?:https?|ftp|mailto):\/\/\S+/i
irb(main):003:0> html = string.gsub urls, '<a href="\0">\0</a>'
=> "here is a link: <a href=\"http://google.com\">http://google.com</a>"
于 2012-05-17T05:11:29.253 回答