2008-12-18 34 views
18

CGI.escapeHTML非常糟糕,但CGI.unescapeHTML完全是borked。例如:是否有比CGI for Ruby更好的HTML轉義和轉義工具?

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

看來,unescapeHTML知道所有的數字代碼加&<>"。而escapeHTML只知道最後四個 - 它不會執行任何數字代碼。我明白,轉義通常不需要像健壯的一樣,因爲HTML將允許大多數字符的字面版本,除了CGI.escapeHTML知道的四個以外。但是消遣應該真的會更好。

有沒有更好的工具在那裏,至少對於消除?

+0

它不處理—無論是。 – Chloe 2014-03-15 01:32:41

回答

26

的寶石ヶ輛應該做的伎倆:

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 

雖然你可能不得不使用字符編碼。

+5

使用htmlentities gem而不是hpricot。 – 2009-01-02 02:35:29