The best source of detailed information on URI encoding is RFC 2396.
Basically, the following substitutions do it:
- s/([^\w()'*~!.-])/sprintf '%%%02x', $1/eg; # encode
+ s/([^\w()'*~!.-])/sprintf '%%%02x', ord $1/eg; # encode
- s/%([A-Fa-f\d]{2})/chr hex $1/eg; # decode
+ s/%([A-Fa-f\d]{2})/chr hex $1/eg; # decode
However, you should only apply them to individual URI components, not
the entire URI, otherwise you'll lose information and generally mess