Réponses:
Il y a une 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 le sortir de la chaîne.
Si nous voulons l'utiliser dans le modèle
ActionView::Base.full_sanitizer.sanitize(html_string)
qui est le code de la méthode "strip_tags"
require 'html/sanitizer'
et instancier votre propre désinfectant avec HTML::FullSanitizer.new
.
require 'html/sanitizer'
erreur, je dois donc utiliser: Rails::Html::FullSanitizer.new
( edgeapi.rubyonrails.org/classes/HTML/… )
Oui, appelez ceci: sanitize(html_string, tags:[])
ActionView::Base.full_sanitizer.sanitize(html_string)
La liste blanche des balises et des attributs peut être spécifiée comme 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 le joyau du 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
Rails::Html::FullSanitizer.new
si vous ne souhaitez pas spécifier de liste blanche.
text.strip
fonctionne