Bug #6696

[PATCH] ERB::Util.url_encode should not escape unreserved characters

Added by Mark Dodwell over 3 years ago. Updated over 2 years ago.

Assignee:Masatoshi Seki
ruby -v:ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.2] Backport:


ERB::Util.url_encode is escaping tilde (~) where it should not according to the RFC.

This fixes that behaviour so that it now correctly avoids escaping all unreserved characters as per RFC 3986, Section 2.3:

Fwiw., this is also how the Perl implementation works:

I opened this issue originally on Github, but I think it warrants further discussion, so re-opening here.

erb_util_url_encode_rfc_fix.patch Magnifier (1.46 KB) Mark Dodwell, 07/04/2012 05:03 PM


#1 Updated by Mark Dodwell over 3 years ago

Sorry, somehow this ticket subject line got truncated. Newline paste fail.

#2 Updated by Shyouhei Urabe over 3 years ago

  • Subject changed from [PATCH] to [PATCH] ERB::Util.url_encode should not escape unreserved characters
  • Status changed from Open to Feedback

FYI, the old discussion is at https://github.com/ruby/ruby/pull/54

I see the patch itself is OK. The question is to be or not to be able to escape tilde.

#3 Updated by Yui NARUSE over 3 years ago

  • Status changed from Feedback to Assigned
  • Assignee set to Masatoshi Seki

#4 Updated by Martin Dürst over 3 years ago

The tilde was added to the unreserved characters in URIs in RFC 2396. It is specifically mentioned in http://tools.ietf.org/html/rfc2396#appendix-G.2:

The tilde "~" character was added to those in the "unreserved" set,
since it is extensively used on the Internet in spite of the
difficulty to transcribe it with some keyboards.

RFC 2396 was published in August 1998, about 14 years ago. I think it's safe to make this change now :-).

#5 Updated by Yui NARUSE over 3 years ago

This can change but need not, so up to seki, the maintainer.


#6 Updated by Yui NARUSE over 2 years ago

  • Target version changed from 1.9.3 to next minor

Also available in: Atom PDF