19

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知っているようです。そして、それらの最後の4つについてのみ知っています-それは数値コードを何もしません。HTMLは、知っている4つを除くほとんどの文字のリテラルバージョンを許可するため、エスケープは一般にそれほど堅牢である必要はないことを理解しています。しかし、逃げるのは本当に良いはずです。&<>"escapeHTMLCGI.escapeHTML

少なくとも逃げるのに、もっと良いツールはありますか?

4

2 に答える 2

28

htmlentities gem でうまくいくはずです:

require 'rubygems'
require 'htmlentities'

coder = HTMLEntities.new

coder.decode('…') # => "…"
coder.decode('…') # => "…"
coder.decode('¢') # => "¢"
coder.decode('¢') # => "¢"
coder.encode("…", :named) # => "…"
coder.encode("…", :decimal) # => "…"
于 2008-12-20T18:17:41.527 に答える
2
require 'rubygems'
require 'hpricot'

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

文字エンコーディングをいじる必要があるかもしれませんが。

于 2008-12-18T23:21:06.393 に答える