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
只知道最后四个 - 它没有执行任何数字代码。我知道转义通常不需要那么强大,因为除了CGI.escapeHTML
知道的四个字符之外,HTML将允许大多数字符的文字版本。但是,失败应该会更好。
那里有更好的工具吗,至少对于没有问题?
答案 0 :(得分:27)
htmlentities gem应该可以解决这个问题:
require 'rubygems'
require 'htmlentities'
coder = HTMLEntities.new
coder.decode('…') # => "…"
coder.decode('…') # => "…"
coder.decode('¢') # => "¢"
coder.decode('¢') # => "¢"
coder.encode("…", :named) # => "…"
coder.encode("…", :decimal) # => "…"
答案 1 :(得分:2)
require 'rubygems'
require 'hpricot'
Hpricot('…', :xhtml_strict => true).to_plain_text
虽然您可能不得不摆弄字符编码。