From: rubikitch@... Date: 2008-04-23T22:30:51+09:00 Subject: [ruby-dev:34497] ERB::Util#url_encode bug fix るびきちです。 ERB::Util#url_encodeが日本語文字列で正しい結果にならないバグを修正しました。 Index: lib/erb.rb =================================================================== --- lib/erb.rb (revision 16174) +++ lib/erb.rb (working copy) @@ -799,7 +799,8 @@ # Programming%20Ruby%3A%20%20The%20Pragmatic%20Programmer%27s%20Guide # def url_encode(s) - s.to_s.gsub(/[^a-zA-Z0-9_\-.]/n){ sprintf("%%%02X", $&.unpack("C")[0]) } + s.to_s.dup.force_encoding("ASCII-8BIT").gsub(/[^a-zA-Z0-9_\-.]/n){ + sprintf("%%%02X", $&.unpack("C")[0]) } end alias u url_encode module_function :u Index: test/erb/test_erb.rb =================================================================== --- test/erb/test_erb.rb (revision 16174) +++ test/erb/test_erb.rb (working copy) @@ -411,3 +411,18 @@ assert_equal(ans, ERB.new(src, nil, '-%').result) end end + +class TestERBUtil < Test::Unit::TestCase + include ERB::Util + + def test_01 + assert_equal("Programming%20Ruby%3A%20%20The%20Pragmatic%20Programmer%27s%20Guide", + url_encode("Programming Ruby: The Pragmatic Programmer's Guide")) + end + + def test_02 + assert_equal("%A5%B5%A5%F3%A5%D7%A5%EB", + url_encode("\xA5\xB5\xA5\xF3\xA5\xD7\xA5\xEB".force_encoding("EUC-JP"))) + end + +end -- rubikitch Blog: http://d.hatena.ne.jp/rubikitch/ Site: http://www.rubyist.net/~rubikitch/