对于Ruby来说,有没有比CGI更好的HTML转义和转义工具?

时间:2008-12-18 19:05:59

标签: html ruby escaping

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将允许大多数字符的文字版本。但是,失败应该会更好。

那里有更好的工具吗,至少对于没有问题?

2 个答案:

答案 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

虽然您可能不得不摆弄字符编码。