Friday, 15 June 2012

escaping - Ruby 1.9.3 add unsafe characters to URI.escape -



escaping - Ruby 1.9.3 add unsafe characters to URI.escape -

i using sinatra , parameters url using get '/foo/:bar' {} method. unfortunately, value in :bar can contain nasty things / leads 404, since no route matches /foo/:bar/baz/. utilize uri.escape escape url paramter, considers / valid valid character. mentioned here because default regexp check against not differentiate between unsafe , reserved characters. alter , did this:

uri.escape("foo_<_>_&_3_#_/_+_%_bar", regexp.union(uri::regexp::unsafe, '/'))

just test it.

uri::regexp::unsafe default regexp match against according ruby 1.9.3 documentaton:

class="lang-none prettyprint-override">escape(*arg) synopsis uri.escape(str [, unsafe]) args str string replaces in. unsafe regexp matches symbols must replaced codes. default uses regexp::unsafe. when argument string, represents character set. description escapes string, replacing unsafe characters codes.

unfortunatelly error:

uninitialized constant uri::regexp::unsafe

and this github issue suggests, regexp removed ruby 1.9.3. unfortunately, uri modules documentation kind of bad, cannot figure out. hints?

thanks in advance!

uri#escape not looking for. want cgi#escape:

require 'cgi' cgi.escape("foo_<_>_&_3_#_/_+_%_bar") # => "foo_%3c_%3e_%26_3_%23_%2f_%2b_%25_bar"

this encode allow sinatra retrieve it.

ruby escaping sinatra uri ruby-1.9.3

No comments:

Post a Comment