2012-07-20 58 views
0

顯然,用戶生成的評論內容的html_safe方法確實不是一個好的解決方案。然而,到目前爲止,這是我能夠實現以下功能的唯一解決方案:我想讓用戶引用另一個評論,只需在評論表單中鍵入其他評論的迭代ID,就像這樣「#14 「(引用該文的評論14)。然後在內容輸出中將#14替換爲「[quoted_comment.content]」Rails 3 - 用戶生成的評論內容的替代html_safe?

這是我爲它的代碼中的註釋模式:

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安全的。
有關如何在不執行html_safe方法的情況下處理我的功能的任何建議?

回答

2

我會考慮使用白名單方法並使用HTML Sanitizer方法來清理字符串。

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

+0

感謝您的回答!因此,在我的content_with_quotes開始處去除所有的html,css和javascript可能是一個好主意,並且在除去所有內容之後,執行sub,並且可以在我的content_with_quotes上調用html_safe,而不用擔心任何不需要的html代碼,對? – 2012-07-20 19:23:16

+0

是的,清理你的字符串,直到你知道它的安全,然後調用它'html_safe'。 – 2012-07-20 19:30:56

+0

我不知道爲什麼,但它不會讓我在我的評論模型中執行strip_tags方法。 – 2012-07-20 19:35:53