RailsでRubyを使用していますが、sanitizeまたはequalメソッドを使用して文字列からhtml
を削除し、入力タグのvalue属性内のテキストのみを保持する方法はありますか?
strip_tags
にはActionView::Helpers::SanitizeHelper
メソッドがあります:
http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags
編集:value属性内のテキストを取得するには、Xpath式でNokogiriなどを使用して、文字列からそれを取得できます。
これをモデルで使用したい場合
ActionView::Base.full_sanitizer.sanitize(html_string)
これは「strip_tags」メソッドのコードです
はい、これを呼び出します:sanitize(html_string, tags:[])
ActionView::Base.full_sanitizer.sanitize(html_string)
タグと属性のホワイトリストは、以下のように指定できます。
ActionView::Base.full_sanitizer.sanitize(html_string, :tags => %w(img br p), :attributes => %w(src style))
上記のステートメントでは、タグimg、brおよびpおよび属性srcおよびstyleを使用できます。
Loofahライブラリを使用しました。これはHTMLとXML(ドキュメントと文字列フラグメントの両方)の両方に適しているためです。これは、html sanitizer 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 "
これはどう?
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