2008-12-18 5 views
18

CGI.escapeHTML ist ziemlich schlecht, aber CGI.unescapeHTML ist komplett borked. Zum Beispiel:Gibt es ein besseres HTML-Escaping- und Unescaping-Tool als CGI für 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 "…" 

Es scheint, dass unescapeHTML weiß über all die numerischen Codes sowie &, <, > und ". Und escapeHTML kennt nur die letzten vier - es macht keinen der numerischen Codes. Ich verstehe, dass das Entkommen im Allgemeinen nicht so robust sein muss, da HTML die literalen Versionen der meisten Zeichen erlaubt, außer den vier, die CGI.escapeHTML kennt. Aber Unescaping sollte wirklich besser sein.

Gibt es ein besseres Tool, zumindest für Unescaping?

+0

Es behandelt nicht — entweder. – Chloe

Antwort

26

Das htmlentities Juwel sollte es tun:

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 

Obwohl Sie möglicherweise mit der Zeichenkodierung herumspielen müssen.

+5

Verwenden Sie den Edelstein htmlentities statt hpricot. –