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