Striscia html dalla stringa Ruby on Rails


121

Sto lavorando con Ruby on Rails, c'è un modo per eliminare htmluna stringa usando il metodo sanitize o equal e mantenere solo il testo all'interno dell'attributo value sul tag di input?


Non igienizza o è uguale ma text.stripfunziona
Keon

Risposte:



183

Se vogliamo usarlo in model

ActionView::Base.full_sanitizer.sanitize(html_string)

che è il codice nel metodo "strip_tags"


31
Funziona ma fare riferimento ad ActionView da mdoel è scomodo. Puoi creare require 'html/sanitizer'un'istanza più pulita del tuo disinfettante HTML::FullSanitizer.new.
Nik Haldimann

8
@nhaldimann, require 'html/sanitizer'genera un errore quindi devo usare: Rails::Html::FullSanitizer.new( edgeapi.rubyonrails.org/classes/HTML/… )
Linh Dam


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

La lista bianca di tag e attributi può essere specificata come segue

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

Sopra istruzione consente tag img , BR e p e gli attributi src e stile .


9

Ho usato la libreria Loofah, in quanto è adatta sia per HTML che per XML (sia documenti che frammenti di stringa). È il motore dietro la gemma del disinfettante HTML. Sto semplicemente incollando l'esempio di codice per mostrare quanto sia semplice da usare.

Gemma di luffa

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

Cosa ne pensi di questo?

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

C'è anche Rails::Html::FullSanitizer.newse non vuoi specificare una whitelist.
Fredrik
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.