我在Rails应用程序中使用bb-code进行发布和评论。目前,我有以下内容将帖子的内容放在视图中:
<%= @post.content.bbcode_to_html.html_safe.gsub('<a', '<a rel="nofollow"') %>
将bb-code转换为html并在所有链接中添加“nofollow”的最佳方法是什么?
谢谢!
答案 0 :(得分:2)
您正在使用的bb-ruby
gem允许使用作为参数传递给bbcode_to_html
方法的自定义BBCode转换。但是,如果你真的想要所有链接来包含rel="nofollow"
,我认为你最好的选择是将猴子修补它们本身。基于BBRuby source,您希望这样做:
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 %>