从字符串Ruby on Rails中删除html

Mat*_*ias 112 html ruby string ruby-on-rails-3

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

Jon*_*Jon 174

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

ActionView::Base.full_sanitizer.sanitize(html_string)
Run Code Online (Sandbox Code Playgroud)

这是"strip_tags"方法中的代码

  • 这有效,但从mdoel引用ActionView很尴尬.更干净的是,您可以"要求"html/sanitizer'并使用`HTML :: FullSanitizer.new`实例化您自己的消毒剂. (30认同)
  • @nhaldimann,'需要"的HTML/sanitizer'`引发错误,所以我必须使用:`的Rails :: HTML :: FullSanitizer.new`(http://edgeapi.rubyonrails.org/classes/HTML/FullSanitizer.html#method -i-的sanitize) (6认同)
  • 我在 Rails 7 中使用 `Rails::Html::FullSanitizer.new.sanitize(string)` (4认同)

Mic*_*ohl 136

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

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

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


bca*_*man 21

是的,打电话给: sanitize(html_string, tags:[])


Sat*_*ati 19

ActionView::Base.full_sanitizer.sanitize(html_string)
Run Code Online (Sandbox Code Playgroud)

标签和属性的白名单可以指定为以下方式

ActionView::Base.full_sanitizer.sanitize(html_string, :tags => %w(img br p), :attributes => %w(src style))
Run Code Online (Sandbox Code Playgroud)

上面的语句允许标签:img,br和p以及属性:src和style.


Kri*_*ula 5

我使用了丝瓜络库,因为它适合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 "
Run Code Online (Sandbox Code Playgroud)