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?
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.
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"
Oui, appelez ceci: sanitize(html_string, tags:[])
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.
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.
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 "
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