Forum: Ruby-core URI#encode doesn't encode characters '[' and ']'. They should be encoded as %5B and %5D respectively

66a1b221f4d64b9a5b07d287d4f5db27?d=identicon&s=25 unknown (Guest)
on 2014-08-05 20:50
(Received via mailing list)
Issue #9806 has been updated by Charles Leu.


Yusuke Endoh wrote:
> Yusuke Endoh <mame@tsg.ne.jp>
FYI: Refer to the current W3.org BNF for URI syntax
http://www.w3.org/Addressing/URL/5_URI_BNF.html

Note the statement 'The "national" and "punctuation" characters do not
appear in any productions and therefore may not appear in URIs.'.  That
statement is at odds with RFC 2732.

It appears that authors of the standards docs aren't always aware of,
and/or consistent with, other standards docs.  Thus it is not surprising
there is confusion regarding what is or isn't a valid URI encoding.

----------------------------------------
Bug #9806: URI#encode doesn't encode characters '[' and ']'.  They
should be encoded as %5B and %5D respectively.
https://bugs.ruby-lang.org/issues/9806#change-48202

* Author: Charles Leu
* Status: Open
* Priority: Normal
* Assignee:
* Category:
* Target version:
* ruby -v: 2.2.0 and prior versions as well
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
The subject says it all.

IRB session demonstrating the problem:
charlez$ irb
head :001 > RUBY_VERSION
 => "2.2.0"
head :002 > require 'uri'
 => true
head :003 > my_str = '[ futsal club ]'
 => "[ futsal club ]"
head :004 > URI.encode(my_str)
 => "[%20futsal%20club%20]"
head :005 >

Note: Testing using JavaScript function encodeURI('[ futsal club ]')
produces "%5B%20futsal%20club%20%5D" which is the correct result.
This topic is locked and can not be replied to.