it-swarm.cn

从字符串Ruby on Rails中删除html

我正在使用Ruby on Rails,有没有办法使用sanitize或equal方法从字符串中去除html并且只在输入标记的value属性中保留文本?

108
Mattias

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

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

编辑:为了获取值属性中的文本,您可以使用Nokogiri和Xpath表达式之类的东西来获取字符串中的内容。

131
Michael Kohl

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

ActionView::Base.full_sanitizer.sanitize(html_string)

这是“strip_tags”方法中的代码

166
Jon

是的,请这样说:sanitize(html_string, tags:[])

20
bcackerman
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

15
Satishakumar Awati

我使用了Loofah库,因为它适用于HTML和XML(包括文档和字符串片段)。它是html清洁剂宝石背后的引擎。我只是粘贴代码示例来说明它的使用简单。

丝瓜宝石

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

这个怎么样?

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