从stringRuby on Rails中去除html

我正在使用Ruby on Rails,有没有一种方法从一个string使用sanitize或等同的方法去除html ,并保留input标签只有文本内的值属性?

ActionView::Helpers::SanitizeHelper有一个strip_tags方法:

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

编辑:为了获取值属性中的文本,你可以使用类似Nokogiri的Xpathexpression式来获取string。

如果我们想在模型中使用它

 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。

这个怎么样?

 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 

我使用了Loofah库,因为它适用于HTML和XML(包括文档和string片段)。 它是html消毒剂gem的引擎。 我只是简单地粘贴代码示例来展示它的使用是多么简单。

丝瓜络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 "