[smohan@dhcpa-111 ~]$ irb irb(main):001:0> require 'uri' => true irb(main):002:0> p URI::Parser.new.regexp[:UNSAFE] /[^\-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]/ => /[^\-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]]/ irb(main):003:0> p Regexp.union([URI::Parser.new.regexp[:UNSAFE],'~','@']) /(?-mix:[^\-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]])|~|@/ => /(?-mix:[^\-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]])|~|@/ irb(main):004:0> irb(main):005:0* irb(main):006:0* irb(main):007:0* irb(main):008:0* puts URI::encode("/touch/123~ipad.png") /touch/123~ipad.png => nil irb(main):009:0> puts URI::encode("/touch/123~ipad.png", Regexp.union([URI::Parser.new.regexp[:UNSAFE],'~','@'])) /touch/123%7Eipad.png => nil irb(main):010:0> puts URI::encode("/touch/123@ipad.png") /touch/123@ipad.png => nil irb(main):011:0> puts URI::encode("/touch/123@ipad.png", Regexp.union([URI::Parser.new.regexp[:UNSAFE],'~','@'])) /touch/123%40ipad.png => nil irb(main):012:0> [smohan@dhcpa-111 ~]$