From 4d3f57076f3baf8529e3c6071d6ccf4bc70552b1 Mon Sep 17 00:00:00 2001 From: =?utf-8?q?Jakub=20Ku=C5=BAma?= Date: Wed, 13 May 2009 01:39:17 +0200 Subject: [PATCH] unescape encoding UTF-8 in Ruby 1.9.1 --- lib/rack/utils.rb | 3 ++- test/spec_rack_utils.rb | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletions(-) diff --git a/lib/rack/utils.rb b/lib/rack/utils.rb index 42e2e69..1c8510f 100644 --- a/lib/rack/utils.rb +++ b/lib/rack/utils.rb @@ -20,9 +20,10 @@ module Rack # Unescapes a URI escaped string. (Stolen from Camping). def unescape(s) - s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n){ + result = s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n){ [$1.delete('%')].pack('H*') } + RUBY_VERSION >= "1.9" ? result.force_encoding(Encoding::UTF-8) : result end module_function :unescape diff --git a/test/spec_rack_utils.rb b/test/spec_rack_utils.rb index cdf25c3..3757079 100644 --- a/test/spec_rack_utils.rb +++ b/test/spec_rack_utils.rb @@ -20,6 +20,12 @@ context "Rack::Utils" do should.equal "q1!2\"'w$5&7/z8)?\\" end + if RUBY_VERSION >= "1.9" + specify "should return unescaped string with UTF-8 encoding in Ruby 1.9.1" do + Rack::Utils.unescape("test").encoding.should.equal Encoding::UTF_8 + end + end + specify "should parse query strings correctly" do Rack::Utils.parse_query("foo=bar").should.equal "foo" => "bar" Rack::Utils.parse_query("foo=bar&foo=quux"). -- 1.6.0.4