web-dev-qa-db-fra.com

Supprimer le code HTML de la chaîne Ruby sur Rails

Je travaille avec Ruby sur Rails, existe-t-il un moyen de supprimer html d'une chaîne à l'aide de la méthode sanitize ou de la méthode equal et de ne conserver que le texte dans l'attribut value de la balise input?

109
Mattias

Il y a un strip_tags méthode dans ActionView::Helpers::SanitizeHelper:

http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags

Edit: pour obtenir le texte dans l'attribut value, vous pouvez utiliser quelque chose comme Nokogiri avec une expression Xpath pour extraire ce texte de la chaîne.

132
Michael Kohl

Si nous voulons utiliser ceci dans le modèle

ActionView::Base.full_sanitizer.sanitize(html_string)

qui est le code de la méthode "strip_tags"

169
Jon

Oui, appelez ceci: sanitize(html_string, tags:[])

21
bcackerman
ActionView::Base.full_sanitizer.sanitize(html_string)

La liste blanche des balises et attributs peut être spécifiée ci-dessous

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

L'instruction ci-dessus autorise les balises img, br et p et les attributs src et style.

17
Satishakumar Awati

J'ai utilisé la bibliothèque Loofah, car elle convient à la fois au HTML et au XML (documents et fragments de chaîne). C'est le moteur derrière la gemme de désinfectant html. Je colle simplement l'exemple de code pour montrer à quel point il est simple à utiliser.

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 "
5
Krishna Vedula

Que dis-tu de ça?

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
1
josetapadas