CGI.escapeHTML
是非常糟糕的,但CGI.unescapeHTML
完全被塞了.例如:
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
知道的四个字符.但是,失业应该会更好.
有没有更好的工具,至少对于unescaping?
htmlentities gem应该可以解决这个问题:
require 'rubygems' require 'htmlentities' coder = HTMLEntities.new coder.decode('…') # => "…" coder.decode('…') # => "…" coder.decode('¢') # => "¢" coder.decode('¢') # => "¢" coder.encode("…", :named) # => "…" coder.encode("…", :decimal) # => "…"