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