From: Andrew Hodgkinson Date: 2006-07-07T08:27:43+09:00 Subject: URI.escape() broken or misdocumented in Ruby 1.8.4? I posted this in the Ruby On Rails forum a moment ago because of other URI.escape() related messages there, but really it's a Ruby thing, not a Rails thing, so it belongs in the Ruby forum. Thus, a repost :-) URI.escape() is supposed to be able to take a second parameter listing unsafe characters in the URI. This may be a regexp or string. If a string, it's supposed to represent a character set listing all unsafe characters. An example given in the core documentation at: http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/classes/URI/Escape.html#M008992 ...is: p URI.escape("@?@!", "!?") # => "@%3F@%21" Unfortunately this doesn't work. It seems that the string does not represent a character set to match any more, but a literal string to find - thus the following result is actually seen: p URI.escape("@?@!", "!?") # => "@?@!" p URI.escape("@?@!", "@?") # => "%40%3F@!" Matching strings in this way is thoroughly bizarre as highlighted by the above example; "@" is being escaped for the substring "@?" but not for the substring "@!". The way to get the documented style of substitution is rather clumsy; one must manually construct the character set: p URI.escape("@?@!", Regexp.new("[!?]")) # => "@%3F@%21" I was going to update the documentation Wiki to mention the differing behaviour in Ruby 1.8.4 by clicking on the link given at the bottom of the page, which goes to: http://www.ruby-doc.org/ru/wiki/index.rb/Core/URI::Escape ...but this gives a blank page. In fact the whole Wiki seems to be a bit broken, with little documentation actually apparently existing and the search engine failing to find anything at all under "URI". Am I missing something here? -- Posted via http://www.ruby-forum.com/.