2012-03-29 17 views
6

sanitize() en ApplicationHelper no cierra las etiquetas.Sanitize HTML y cierre las etiquetas incompletas

s = "<a href='http://example.com'>incomplete" 
sanitize(s, :tags => ['a', 'p']) 

El fragmento de arriba deja la cadena tal como está. ¿Cómo podría obligarlo a anexar un cierre </a> o al menos quitar el <a> en total?

Respuesta

2

La respuesta es actualizada

html = "<a href='http://example.com'>incomplete" 
html = sanitize(s, tags: %w[a p]) 
Nokogiri::HTML::DocumentFragment.parse(html).to_html 
+0

La última línea en sí misma me funcionó muy bien y también cerró las etiquetas no cerradas. –

5

Puede utilizar un analizador de HTML adecuado para hacer esto. Recomendaría Nokogiri para el trabajo:

require 'nokogiri' 
# ... 
s = "<a href='http://example.com'>incomplete" 
Nokogiri::HTML::fragment(sanitize(s, :tags => ['a', 'p'])).to_xml 
# => "<a href=\"http://example.com\">incomplete</a>" 

Esto siempre devolverá un XML válido. Por supuesto, puede empaquetar eso en su propio método de ayuda para un uso más fácil.

Cuestiones relacionadas