2008-12-18 33 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