在Rails 3视图中,如何检测显示字符串中的URL并将其格式化为该URL的链接?

时间:2011-02-09 08:34:33

标签: ruby-on-rails

我的网站上有用户生成的评论。如果用户在评论中添加了一个URL,我希望将其格式化为链接并实际链接到该URL。我该怎么做?

5 个答案:

答案 0 :(得分:18)

Rails有一个auto_link文本助手。

auto_link("Go to http://www.rubyonrails.org and say hello to david@loudthinking.com")
# => "Go to <a href=\"http://www.rubyonrails.org\">http://www.rubyonrails.org</a> and
#     say hello to <a href=\"mailto:david@loudthinking.com\">david@loudthinking.com</a>"

auto_link("Visit http://www.loudthinking.com/ or e-mail david@loudthinking.com", :link => :urls)
# => "Visit <a href=\"http://www.loudthinking.com/\">http://www.loudthinking.com/</a>
#     or e-mail david@loudthinking.com"

答案 1 :(得分:8)

在rails 3.1中,auto_link已被删除,它现在是一个独立的gem:https://github.com/tenderlove/rails_autolink

答案 2 :(得分:0)

您也可以使用“auto_html”gem,请参阅https://github.com/dejan/auto_html

免责声明:我自己还没有使用它,但看起来它可以做你想要的。

答案 3 :(得分:0)

我还建议您考虑Markdown之类的评论。那么你可以让Markdown引擎为你担心这样的事情。

答案 4 :(得分:-3)

首先,您应该定义匹配http字符串的正则表达式,例如

IPv4_PART = /\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]/  # 0-255
REGEXP = %r{
    https?://                                                    # http:// or https://
    ([^\s:@]+:[^\s:@]*@)?                                        # optional username:pw@
    ( (([^\W_]+\.)*xn--)?[^\W_]+([-.][^\W_]+)*\.[a-z]{2,6}\.? |  # domain (including Punycode/IDN)...
        #{IPv4_PART}(\.#{IPv4_PART}){3} )                        # or IPv4
    (:\d{1,5})?                                                  # optional port
    ([/?]\S*)?                                                   
}iux

然后,假设评论正文是str,你这样做:

str.gsub(REGEXP) do |m|
    link_to m, m
end