2008-12-18 13 views
18

CGI.escapeHTML è piuttosto male, ma CGI.unescapeHTML è completamente borked. Per esempio:Esiste uno strumento migliore per l'escape e lo escape di HTML rispetto a CGI per Ruby?

require 'cgi' 

CGI.unescapeHTML('…') 
# => "…"     # correct - an ellipsis 

CGI.unescapeHTML('…') 
# => "…"    # should be "…" 

CGI.unescapeHTML('¢') 
# => "\242"     # correct - a cent 

CGI.unescapeHTML('¢') 
# => "¢"    # should be "\242" 

CGI.escapeHTML("…") 
# => "…"     # should be "…" 

Sembra che unescapeHTML sa di tutti i codici numerici più &, <, > e ". E escapeHTML conosce solo gli ultimi quattro - non fa nessuno dei codici numerici. Capisco che l'escaping in genere non debba essere così robusto dal momento che HTML consentirà la versione letterale della maggior parte dei caratteri tranne i quattro che sono noti a CGI.escapeHTML. Ma senza scampo dovrebbe essere davvero meglio.

C'è uno strumento migliore là fuori, almeno per scortecciamento?

+0

Non gestisce — neanche. – Chloe

risposta

26

Il htmlentities gemma dovrebbe fare il trucco:

require 'rubygems' 
require 'htmlentities' 

coder = HTMLEntities.new 

coder.decode('…') # => "…" 
coder.decode('…') # => "…" 
coder.decode('¢') # => "¢" 
coder.decode('¢') # => "¢" 
coder.encode("…", :named) # => "…" 
coder.encode("…", :decimal) # => "…" 
2
require 'rubygems' 
require 'hpricot' 

Hpricot('…', :xhtml_strict => true).to_plain_text 

Anche se potresti dover smanettare con la codifica dei caratteri.

+5

Utilizza la gemma htmlentities anziché hpricot. –

Problemi correlati