Rails3-在用户生成的评论内容上替代html_safe



显然,对用户生成的评论内容使用html_safe方法确实不是一个好的解决方案。然而,到目前为止,这是我能想到的实现以下功能的唯一解决方案:我想让用户只需在评论表单中键入另一条评论的迭代id,就可以引用另一条注释,比如"#14"(引用该文章的评论14)。然后,在内容输出中,这个#14被替换为"[quoted_content.content]"

这是我在评论模型中的代码:

def content_with_quotes
  if content.match(/(#([0-9]+))s/)
    comment_content = content
    comment_content.scan(/(#([0-9]+))s/) do
      if quoted_comment = Comment.where(article_id: self.article_id).where(iteration_id: $2).first
        if quoted_comment.created_at < self.created_at
          return comment_content.sub(/(#[0-9]+)s/, "<i>'#{quoted_comment.content}'</i> ")
        end
      end
    end
  else
    return content
  end
end

然后在我的评论视图中,我使用comment.content_with_quotes.html_safe应用它,一切都很好。

所以,这就是我想要的,而且它是有效的,但当然,这种html_safe方法对于用户提交的内容来说是个坏主意,因为它可能不安全
关于如何在不使用html_safe方法的情况下使用我的功能,有什么建议吗?

我会考虑使用白名单方法,并使用HTML Sanitizer方法来清理字符串。

请参阅http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html

最新更新