2011-09-14 117 views
92

我正在使用Ruby on Rails,有沒有一種方法可以從字符串中去掉html,使用sanitize或equal方法,並且只在輸入標籤中保留value屬性值屬性?從字符串去除HTML Ruby on Rails

+0

不消毒或等於但'text.strip'工作 – Keon

回答

142

如果我們想在模型

ActionView::Base.full_sanitizer.sanitize(html_string) 

這是代碼中的 「用strip_tags」 的方法來使用這個

+27

這工作,但來自mdoel指是的ActionView尷尬。更乾淨你可以'需要'html/sanitizer''並用'HTML :: FullSanitizer.new'實例化你自己的消毒劑。 –

+6

@nhaldimann,'require'html/sanitizer''產生錯誤,所以我必須使用:'Rails :: Html :: FullSanitizer.new'(http://edgeapi.rubyonrails.org/classes/HTML/FullSanitizer.html# method-i-sanitize) –

19

是的,稱之爲:sanitize(html_string, :tags=>[])

8
ActionView::Base.full_sanitizer.sanitize(html_string) 

標籤白名單和屬性可以指定爲波紋管

ActionView::Base.full_sanitizer.sanitize(html_string, :tags => %w(img br p), :attributes => %w(src style)) 

以上聲明允許標籤:img,br和p 和 屬性:src和樣式。

2

這個怎麼樣?

white_list_sanitizer = Rails::Html::WhiteListSanitizer.new 
WHITELIST = ['p','b','h1','h2','h3','h4','h5','h6','li','ul','ol','small','i','u'] 


[Your, Models, Here].each do |klass| 
    klass.all.each do |ob| 
    klass.attribute_names.each do |attrs| 
     if ob.send(attrs).is_a? String 
     ob.send("#{attrs}=", white_list_sanitizer.sanitize(ob.send(attrs), tags: WHITELIST, attributes: %w(id style)).gsub(/<p>\s*<\/p>\r\n/im, '')) 
     ob.save 
     end 
    end 
    end 
end 
+0

如果你不想指定白名單,還有'Rails :: Html :: FullSanitizer.new'。 – Fredrik

1

我用絲瓜庫,因爲它是適用於HTML和XML(這兩個文件和字符串片段)。它是html消毒劑寶石的引擎。我只是簡單地粘貼代碼示例來展示它的使用方式。

Loofah Gem

unsafe_html = "ohai! <div>div is safe</div> <script>but script is not</script>" 

doc = Loofah.fragment(unsafe_html).scrub!(:strip) 
doc.to_s # => "ohai! <div>div is safe</div> " 
doc.text # => "ohai! div is safe "