0

我在 Rails 应用程序中使用 bb-code 来发布和评论。目前,我有以下内容可以将帖子的内容放在视图中:

<%= @post.content.bbcode_to_html.html_safe.gsub('<a', '<a rel="nofollow"') %>

将 bb-code 转换为 html 并将“nofollow”添加到所有链接的最佳方法是什么?

谢谢!

4

1 回答 1

2

您正在使用的bb-rubygem 允许使用作为参数传递给bbcode_to_html方法的自定义 BBCode 翻译。但是,如果您真的希望所有链接都包含rel="nofollow",我认为您最好的选择是猴子修补它们 gem 本身。基于BBRuby 源代码,您希望执行以下操作:

module BBRuby
  @@tags = @@tags.merge({
    'Link' => [
      /\[url=(.*?)\](.*?)\[\/url\]/mi,
      '<a href="\1" rel="nofollow">\2</a>',
      'Hyperlink to somewhere else',
      'Maybe try looking on [url=http://google.com]Google[/url]?',
      :link],
    'Link (Implied)' => [
      /\[url\](.*?)\[\/url\]/mi,
      '<a href="\1" rel="nofollow">\1</a>',
      'Hyperlink (implied)',
      "Maybe try looking on [url]http://google.com[/url]",
      :link],
    'Link (Automatic)' => [
      /(\A|\s)((https?:\/\/|www\.)[^\s<]+)/,
      ' <a href="\2" rel="nofollow">\2</a>',
      'Hyperlink (automatic)',
      'Maybe try looking on http://www.google.com',
      :link]
    })
end

这将重写 BBRuby 转换器以始终包含 nofollow 属性。我会config/initializers用一个描述性的文件名把它放进去,比如bbruby_nofollow_monkeypatch.rb

至于html_safe,我会保持原样。据我了解,这是一种首选方式,我认为它可以让您的意图清晰。上面的猴子补丁使您视图中的行更具可读性:

<%= @post.content.bbcode_to_html.html_safe %>
于 2012-04-30T00:23:31.383 回答