diff options
-rw-r--r-- | lib/uri/common.rb | 2 | ||||
-rw-r--r-- | test/uri/test_common.rb | 2 |
2 files changed, 3 insertions, 1 deletions
diff --git a/lib/uri/common.rb b/lib/uri/common.rb index 17d9ffc28c..811ec98aad 100644 --- a/lib/uri/common.rb +++ b/lib/uri/common.rb @@ -370,7 +370,7 @@ module URI if str.encoding != Encoding::ASCII_8BIT if enc && enc != Encoding::ASCII_8BIT str.encode!(Encoding::UTF_8, invalid: :replace, undef: :replace) - str.encode!(enc, fallback: ->(x){"&#{x.ord};"}) + str.encode!(enc, fallback: ->(x){"&##{x.ord};"}) end str.force_encoding(Encoding::ASCII_8BIT) end diff --git a/test/uri/test_common.rb b/test/uri/test_common.rb index 5bec21ca29..1afa35f93d 100644 --- a/test/uri/test_common.rb +++ b/test/uri/test_common.rb @@ -82,6 +82,8 @@ class TestCommon < Test::Unit::TestCase "\u3042".encode("sjis"), Encoding::UTF_8)) assert_equal("B0", URI.encode_www_form_component( "\u3042".encode("sjis"), Encoding::UTF_16LE)) + assert_equal("%26%23730%3B", URI.encode_www_form_component( + "\u02DA", Encoding::WINDOWS_1252)) # invalid assert_equal("%EF%BF%BD%EF%BF%BD", URI.encode_www_form_component( |