Есть ли лучший инструмент для выхода и удаления HTML, чем CGI для Ruby? - PullRequest
19 голосов
/ 18 декабря 2008

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. Но спасение должно быть лучше.

Есть ли лучший инструмент, по крайней мере, для ухода?

Ответы [ 2 ]

27 голосов
/ 20 декабря 2008

Драгоценный камень htmlentities должен сделать свое дело:

require 'rubygems'
require 'htmlentities'

coder = HTMLEntities.new

coder.decode('…') # => "…"
coder.decode('…') # => "…"
coder.decode('¢') # => "¢"
coder.decode('¢') # => "¢"
coder.encode("…", :named) # => "…"
coder.encode("…", :decimal) # => "…"
2 голосов
/ 19 декабря 2008
require 'rubygems'
require 'hpricot'

Hpricot('…', :xhtml_strict => true).to_plain_text

Хотя вам, возможно, придется возиться с кодировкой символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...