2011-08-18 36 views
3

Rails 3.1刪除了auto_link方法。它繼續存在於一個插件中,但它從來沒有像UGC那樣工作。安全鏈接用戶生成的內容,同時在Rails中轉義HTML字符

運行auto_link後,您必須調用html_safe才能呈現鏈接,導致任何UGC HTML也按原樣顯示。

是否有一個將html_escape或消毒內容並安全鏈接文本的庫?這看起來像是一個常見的用例,並且實施起來有點痛苦,所以我認爲那裏一定有東西。

例如:

<<script> do bad things </script> http://www.google.com?q=viagra&page=1

我願意直到結束:

&lt;script&gt; do bad things &lt;/script&gt; <a href='http://www.google.com?q=viagra&amp;page=1'>http://www.google.com?q=viagra&amp;page=1</a>

+0

也許你應該使用JS在客戶端解析網址,並將其轉換爲鏈接。 – inntran

+0

也許[淨化寶石](https://github.com/rgrove/sanitize)可以提供幫助嗎? –

回答

0

Redcloth(http://redcloth.org/)可能是你是什麼尋找。它不允許你使用普通的html(反正btw並不是一個好主意),但它實際上支持完整的紡織品標記語言,所以它也很靈活。紅布紡織品參考(http://redcloth.org/textile/phrase-modifiers/#links)也顯示了鏈接的語法。基本上,你可以用它來清理任何你想要的字符串。我自己用before_safe指令,用它來博客文章,所以 它總是被調用保存之前:

class Article < ActiveRecord::Base 
     before_save :parse_text 

     def parse_text 
      if RedCloth.nil? 
       self.article_text = RedCloth.new(self.article_text).to_html 
      end 
     end 
    end 
相關問題