According to RFC 2396 (http://www.ietf.org/rfc/rfc2396.txt) the reserved
characters in the query component of a URI are ";", "/", "?", ":", "@","&",
"=", "+", ",", and "$".
Apache::Util->escape_uri() does not escape ":", "@", "&", "=", "+", ",", or
"$".
Something like the following should work:
use URI::Escape qw(uri_escape);
sub uri_escape_query_value {
my $character_class = '^A-Za-z0-9\-_.!~*\'()';
uri_escape($_[0], $character_class);
}
- Kyle
----- Original Message -----
From: "Ray Zimmerman" <[EMAIL PROTECTED]>
To: "modperl List" <[EMAIL PROTECTED]>
Cc: "Raj Chandran" <[EMAIL PROTECTED]>
Sent: Thursday, November 14, 2002 12:25 PM
Subject: URI escaping question
> Oops ... finger slipped before I was done typing ...
>
> Suppose I have a hash of string values that I want to include in the
> query string of a redirect URL. What is the accepted way of escaping
> the values to be sure that they come through intact?
>
> Specifically, it seems that Apache::Util->escape_uri() is not
> escaping '=' and '&' so if one of the values in the hash is a URI
> with a query string it messes things up.
>
> --
> Ray Zimmerman / e-mail: [EMAIL PROTECTED] / 428-B Phillips Hall
> Sr Research / phone: (607) 255-9645 / Cornell University
> Associate / FAX: (815) 377-3932 / Ithaca, NY 14853
>