2012-03-29 14 views
6

sanitize() in ApplicationHelper non chiude i tag.Sanitizza HTML e chiude tag incompleti

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

Il snippet sopra riportato lascia la stringa così com'è. Come potrei costringerlo ad aggiungere una chiusura </a> o almeno a eliminare del tutto lo <a>?

risposta

2

La risposta è aggiornato

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

L'ultima riga ha funzionato benissimo per me e ha chiuso anche i tag non chiusi. –

5

È possibile utilizzare un parser HTML corretto per eseguire questa operazione. Consiglierei Nokogiri per il lavoro:

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>" 

Ciò restituirà sempre XML valido. Naturalmente è possibile impacchettarlo nel proprio metodo di supporto per un utilizzo più semplice.