Eliminar html de la cadena Ruby on Rails


121

Estoy trabajando con Ruby on Rails, ¿hay alguna manera de quitar htmluna cadena usando el método desinfectar o igual y mantener solo el texto dentro del atributo de valor en la etiqueta de entrada?


No desinfecta ni iguala, pero text.stripfunciona
Keon

Respuestas:



183

Si queremos usar esto en el modelo

ActionView::Base.full_sanitizer.sanitize(html_string)

cuál es el código del método "strip_tags"


31
Esto funciona, pero hacer referencia a ActionView desde mdoel es incómodo. De manera más limpia, puede require 'html/sanitizer'crear una instancia de su propio desinfectante HTML::FullSanitizer.new.
Nik Haldimann

8
@nhaldimann, require 'html/sanitizer'genera un error, así que tengo que usar: Rails::Html::FullSanitizer.new( edgeapi.rubyonrails.org/classes/HTML/… )
Linh Dam


24
ActionView::Base.full_sanitizer.sanitize(html_string)

La lista blanca de etiquetas y atributos se puede especificar a continuación

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

La declaración anterior permite las etiquetas img , br y py los atributos src y style .


9

He usado la biblioteca Loofah, ya que es adecuada tanto para HTML como para XML (tanto documentos como fragmentos de cadenas). Es el motor detrás de la gema desinfectante html. Simplemente pego el ejemplo de código para mostrar lo simple que es de usar.

Gema de lufa

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 "

1

¿Qué tal esto?

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

También existe Rails::Html::FullSanitizer.newsi no desea especificar una lista blanca.
Fredrik
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.