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?


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



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:


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.


Reynard wrote: