从字符串 Ruby on Rails 中剥离 html

我正在使用 Ruby on Rails,有没有一种方法可以使用消毒或等价的方法从字符串中去除 html,并在输入标签上只保留 value 属性中的文本?

109434 次浏览

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

Http://api.rubyonrails.org/classes/actionview/helpers/sanitizehelper.html#method-i-strip_tags

Edit: 为了获得 value 属性中的文本,您可以使用 Nokogiri 之类的东西和 Xpath 表达式来从字符串中获取它。

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

ActionView::Base.full_sanitizer.sanitize(html_string)

这是“ Strip _ tag”方法中的代码

是的,打这个电话: 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))

以上语句允许标记 IMGBRP以及属性 Src风格

这个怎么样?

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 (文档和字符串片段)。它是 html 消毒程序 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 "

这是我在 Rails6.1.3中得到的结果:

.errors-description
= sanitize(message, tags: %w[div span strong], attributes: %w[class])

如果你想删除所有的 html 标签,你可以使用

   htm.gsub(/<[^>]*>/,'')

你可以这样做:

@my_string = <p>My HTML String</p>
@my_string.to_plain_text
=> My HTML String