URI.encode does not encode &=?

I'm wondering why URI.encode does not encode &=? URI.encode('&=?') => '&=?'

Is there alternative that works better? or should I write my own?

-reynard

There's an optional second arg to specify chars to replace:

http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/classes/URI/Escape.html#M009245

b

Reynard wrote:

What's the second argument supposed to be though? should I create a regexp from scratch or use a pre-defined one? the documentation is not very clear.

From googling I found that some people say URI.encode is buggy and

suggested to use CGI.escape? seems to work for me.

- reynard

After I sent that I got curious... I found that the second arg is just a regex with the chars to escape... so /[&=?]/ would escape the chars you're worried about.

I also found however, that it *only* escapes the chars in the regex if you provide one... so you'll have to make sure to escape the stuff that would have been escaped.

I also figured out that the REGEXP::UNSAFE constant they mention is actually URI::REGEXP::UNSAFE. If you require 'uri' in irb and then type that, it'll dump the chars that are in the default regex:

/[^-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]/n

And, one more thing: the file that this is defined in should be at RUBY_ROOT/uri/common.rb... and there are a lot of regexes defined in there.

b

Reynard wrote: