Подтвердить что ты не робот

Как использовать strip_tags в регулярном Ruby-коде (non-rails)?

Мне нужно превратить HTML в простой текст. Там хорошая функция, которая делает это в ActionView SanitizeHelper, но мне трудно понять, как я могу ссылаться на нее и использовать ее в простом файле test.rb.

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

Мне бы хотелось позвонить strip_tags("<b>lol</b>") => "lol"

4b9b3361

Ответ 1

Вопрос довольно старый, но в последнее время у меня была такая же проблема. Я нашел простое решение: gem sanitize. Он светится, прекрасно работает и имеет дополнительные опции, если они вам нужны.

Sanitize.clean("<b>lol</b>") #=> "lol"

Ответ 2

ActiveSupport - единственная инфраструктура Rails, которая поддерживает индивидуальные компоненты вишни. Другие рамки, в том числе ActionView, должны быть требуемыми:

require 'action_view'

Обратите внимание, что это требование не обязательно загружает все 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

Это плохо документировано; Я основывал этот ответ в основном на обсуждении этой проблемы.

Ответ 3

Я считаю, что этого должно быть достаточно:

"<b>lol</b>".gsub(/<[^>]*>/ui,'') #=> lol

Вы также можете использовать Nokogiri:

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

Вы по-прежнему можете использовать 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

Ответ 4

Если вы не используете его очень часто, вы можете использовать:

ActionView::Base.full_sanitizer.sanitize(your_html_string)

else вы можете определить метод в файле test_helper.rb, например:

def strip_html_tags(string)
    ActionView::Base.full_sanitizer.sanitize(string)
end

И затем в вашем файле test.rb используйте следующее:

strip_html_tags(your_html_string)

Ответ 5

Вопрос довольно старый, но вы можете называть его в test.rb следующим образом:

ActionController::Base.helpers.strip_tags("<b>lol</b>") => "lol"

Ответ 6

В этом примере:

"&lt;p&gt;<i>example</i>&lt;/p&gt;"

Это помогло мне:

ActionView::Base.full_sanitizer.sanitize(Nokogiri::HTML(example).text)

Вывод:

example

Ответ 7

HTML::FullSanitizer.new.sanitize('<b>lol</b>') # => "lol"

Ответ 8

В идеале вам потребуется и включить ActionView::Helpers::SanitizeHelper, но есть несколько зависимостей, которые не включаются, когда вы это делаете. Вы можете сами потребовать, чтобы они могли использовать strip_tags.

require 'erb'
require 'active_support'
require 'active_support/core_ext/class/attribute_accessors'
require 'active_support/core_ext/string/encoding'
require 'action_view/helpers/capture_helper'
require 'action_view/helpers/sanitize_helper'

include ActionView::Helpers::SanitizeHelper

strip_tags("<b>lol</b>") # => "lol"

Предполагается, что у вас установлены рельсы на 3 камни.