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
. Но спасение должно быть лучше.
Есть ли лучший инструмент, по крайней мере, для ухода?