Entfernen Sie HTML von der Zeichenfolge Ruby on Rails


121

Ich arbeite mit Ruby on Rails. Gibt es eine Möglichkeit, htmleinen String mit der Methode sanitize oder equals zu entfernen und nur Text im Wertattribut des Eingabe-Tags zu belassen?


Nicht desinfizieren oder gleich, aber text.stripfunktioniert
Keon

Antworten:



183

Wenn wir dies im Modell verwenden wollen

ActionView::Base.full_sanitizer.sanitize(html_string)

Dies ist der Code in der Methode "strip_tags"


31
Dies funktioniert, aber das Verweisen auf ActionView aus dem mdoel ist umständlich. Sauberer können Sie require 'html/sanitizer'und instanziieren Sie Ihr eigenes Desinfektionsmittel mit HTML::FullSanitizer.new.
Nik Haldimann

8
@nhaldimann, require 'html/sanitizer'löst Fehler aus, so dass ich verwenden muss: Rails::Html::FullSanitizer.new( edgeapi.rubyonrails.org/classes/HTML/… )
Linh Dam


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

Eine weiße Liste von Tags und Attributen kann wie folgt angegeben werden

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

Die obige Anweisung erlaubt die Tags img , br und p sowie die Attribute src und style .


9

Ich habe die Loofah-Bibliothek verwendet, da sie sowohl für HTML als auch für XML (sowohl Dokumente als auch Zeichenfolgenfragmente) geeignet ist. Es ist der Motor hinter dem HTML-Desinfektionsjuwel. Ich füge einfach das Codebeispiel ein, um zu zeigen, wie einfach es zu verwenden ist.

Luffa Edelstein

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 "

1

Wie wäre es damit?

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

Es gibt auch, Rails::Html::FullSanitizer.newwenn Sie keine Whitelist angeben möchten.
Fredrik
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.