如何在常规Ruby代码(非rails)中使用strip_tags?

san*_*eme 23 html ruby tags strip actionview

我需要将HTML转换为纯文本.在ActionView的SanitizeHelper中有一个很好的功能,但我无法理解如何引用它并在一个简单的test.rb文件中使用它.

http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html

我想能打电话 strip_tags("<b>lol</b>") => "lol"

san*_*xus 31

问题很古老,但我最近遇到了同样的问题.我找到了一个简单的解决方案:宝石消毒.它很轻,工作正常,如果你需要它还有其他选择.

Sanitize.clean("<b>lol</b>") #=> "lol"
Run Code Online (Sandbox Code Playgroud)


Joh*_*ohn 25

ActiveSupport是唯一支持挑选单个组件的Rails框架.其他框架(包括ActionView)必须是必需的:

require 'action_view'
Run Code Online (Sandbox Code Playgroud)

请注意,此要求不一定会加载所有ActionView.除非线程安全要求自动加载发生急切,否则它只会设置自动加载并需要常见的依赖关系.这意味着遵循要求,如果您参考,例如ActionView::Helpers::SanitizeHelper,它将导致action_view/helpers /sanitize_helper.rb需要.

因此,使用ActionView实现所需的正确,支持的方法如下:

require 'action_view'

class Test < Test::Unit::TestCase # or whatever
  include ActionView::Helpers::SanitizeHelper

  def my_test
    assert_equal "lol", strip_tags("<b>lol</b>")
  end
end
Run Code Online (Sandbox Code Playgroud)

这没有详细记录; 我的回答主要基于对这个问题的讨论.


khe*_*lll 15

我相信这应该足够了:

"<b>lol</b>".gsub(/<[^>]*>/ui,'') #=> lol
Run Code Online (Sandbox Code Playgroud)

您也可以使用Nokogiri:

require 'rubygems'
require 'nokogiri'
doc = Nokogiri::HTML("<b>lol</b>")
doc.text #=> "lol"
Run Code Online (Sandbox Code Playgroud)

您仍然可以通过执行以下操作来使用Rails:

require 'rubygems'
require 'action_view'

class Foo
  include ActionView::Helpers::SanitizeHelper

  def test
    strip_tags("<b>lol</b>")
  end
end

f = Foo.new
puts f.test #=> lol
Run Code Online (Sandbox Code Playgroud)

  • Nokogiri评论的+1.这完全符合我的需求. (2认同)

Mal*_*zad 12

如果您不经常使用它,那么您可以使用:

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

否则你可以在test_helper.rb文件中定义一个方法,如:

def strip_html_tags(string)
    ActionView::Base.full_sanitizer.sanitize(string)
end
Run Code Online (Sandbox Code Playgroud)

然后在test.rb文件中,使用如下:

strip_html_tags(your_html_string)
Run Code Online (Sandbox Code Playgroud)


Ale*_*eks 5

这个问题很老了,但你可以这样称呼它test.rb

ActionController::Base.helpers.strip_tags("<b>lol</b>") => "lol"
Run Code Online (Sandbox Code Playgroud)