From: Keiji Yoshimi Date: 2007-02-06T20:59:49+09:00 Subject: [ruby-dev:30289] cgi.rbのunescapeHTML処理 よしみと申します。 あまり深刻ではないと思いますがcgi.rbで CGI.unescapeHTMLを使ったときにエスケープされていない&が単体で存在したときに その直後にあるHTMLエンティティが影響を受けて変換されないようです。 Index: lib/cgi.rb =================================================================== --- lib/cgi.rb (revision 11643) +++ lib/cgi.rb (working copy) @@ -367,7 +367,7 @@ # CGI::unescapeHTML("Usage: foo "bar" <baz>") # # => "Usage: foo \"bar\" " def CGI::unescapeHTML(string) - string.gsub(/&(.*?);/n) do + string.gsub(/&([a-zA-Z0-9]*?);/n) do match = $1.dup case match when /\Aamp\z/ni then '&' 一応TestCaseもつけておきます。 # test/test_cgi.rb require 'test/unit' require File.expand_path(File.join(File.dirname(__FILE__), '../lib/', 'cgi')) class TestCGI < Test::Unit::TestCase def assert_unescapeHTML expected, actual assert_equal(expected, CGI.unescapeHTML(actual)) end def test_unescapeHTML assert_unescapeHTML('& &', '& &') assert_unescapeHTML('&mref&', '&mref&') assert_unescapeHTML('&3923&', '&3923&') end end もしかしたら既に指摘されていることかもしれませんがよろしくお願いします。