html ruby tags strip actionview

html - ¿Cómo puedo usar strip_tags en el código Ruby normal(sin rieles)?



actionview (8)

ActiveSupport es el único marco de Rails que admite componentes individuales. Los otros marcos, incluido ActionView, deben ser requeridos en masa:

require ''action_view''

Tenga en cuenta que este requisito no necesariamente cargará todo ActionView. Salvo situaciones en las que la seguridad de subprocesos requiere que las autocargas se realicen con entusiasmo, simplemente configura las autocargas y requiere dependencias comunes. Eso significa que siguiendo el requerimiento, si hace referencia, por ejemplo, ActionView::Helpers::SanitizeHelper , causará que action_view/helpers /sanitize_helper.rb sea ​​requerido.

Por lo tanto, la forma correcta y compatible de lograr lo que desea con ActionView es la siguiente:

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

Esto no está bien documentado; Basé esta respuesta principalmente en la discusión sobre este tema .

Necesito convertir HTML en texto plano. Hay una buena función que hace eso en SanitizeHelper de ActionView, pero tengo problemas para entender cómo puedo hacer referencia a él y usarlo en un simple archivo test.rb.

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

Me gustaría poder llamar a strip_tags("<b>lol</b>") => "lol"


Con este ejemplo:

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

Esto me ayudó

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

Salida:

example


Creo que esto debería ser suficiente:

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

Puedes usar Nokogiri también:

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

Todavía puedes ir con Rails one haciendo algo como:

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


La pregunta es bastante antigua, pero puedes llamarlo en tu test.rb así:

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


La pregunta es bastante antigua, pero tuve el mismo problema recientemente. Encontré una solución simple: sanitize gemas. Es ligero, funciona bien y tiene opciones adicionales si las necesita.

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


Lo ideal sería requerir e incluir ActionView::Helpers::SanitizeHelper pero hay varias dependencias que no se incluyen cuando haces eso. Puede solicitarlos usted mismo para poder usar 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"

Esto es asumiendo que tienes rieles 3 gemas instaladas.


Si no lo usas muy a menudo, entonces puedes usar:

ActionView::Base.full_sanitizer.sanitize(your_html_string)

de lo contrario, puede definir un método en el archivo test_helper.rb como:

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

Y luego en tu archivo test.rb, usa esto como:

strip_html_tags(your_html_string)


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