2008-12-18 13 views
18

CGI.escapeHTML es bastante malo, pero CGI.unescapeHTML está completamente remendado. Por ejemplo:¿Hay una mejor herramienta para escanear y escanear HTML que CGI para 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 "…" 

Parece que unescapeHTML sabe acerca de todos los códigos numéricos más &, <, > y ". Y escapeHTML solo conoce esos cuatro últimos, no hace ninguno de los códigos numéricos. Entiendo que, por lo general, el escapado no tiene que ser tan sólido, ya que HTML permitirá las versiones literales de la mayoría de los caracteres, excepto los cuatro que conoce CGI.escapeHTML. Pero la eliminación del vacío realmente debería ser mejor.

¿Hay alguna herramienta mejor, al menos para quitar el vacío?

+0

No maneja — tampoco. – Chloe

Respuesta

26

La gema htmlentities debe hacer el truco:

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 

Aunque puede que tenga que juguetear con la codificación de caracteres.

+5

Usa la gema htmlentities en lugar de hpricot. –

Cuestiones relacionadas