in reply to Packing a URL into a URL

Here you go
#!/usr/bin/perl -w use strict; use URI::Escape; use HTTP::Request; my $ru = uri_escape("http://foo.org/cgi-bin/bar.cgi?baz = qu ux;foo=di +m"); my $v=new HTTP::Request(url=>"http://foo.org/cgi-bin/bar.cgi?ru=$ru"); print $v->url, $/; =pod prints: http://foo.org/cgi-bin/bar.cgi?ru=http%3A%2F%2Ffoo.org%2Fcgi-bin%2Fbar +.cgi%3Fbaz%20%3D%20qu%20ux%3Bfoo%3Ddim call, say: $cgi->redirect( uri_unescape($cgi->param('ru')); to use the url =cut

Update: I hasten to point out the the uri_unescape() suggestion in pod is insecure if you care where the redirect goes or whether it is an url at all. Repaired a couple of pasteos.

After Compline,
Zaxo

Replies are listed 'Best First'.
Re: Re: Packing a URL into a URL
by keith (Novice) on May 29, 2002 at 03:12 UTC
    Zaxo, I compiled your code to the up until the "=pod" line. You say:
    prints: http://foo.org/cgi-bin/bar.cgi?ru=http%3A%2F%2Ffoo.org%2Fcgi-bin%2Fbar +.cgi%3Fbaz%20%3D%20qu%20ux%3Bfoo%3Ddim

    But, this is what it prints on my machine:
    http://foo.org/cgi-bin/bar.cgi?ru=http://foo.org/cgi-bin/bar.cgi?baz%2 +0=%20qu%20ux;foo=dim

    Only spaces are encoded.........?
Re: Re: Packing a URL into a URL
by Zaxo (Archbishop) on May 29, 2002 at 03:38 UTC

    Not sure why you're getting different results, but I can tell you hoe to adjust what gets escaped. &uri_escape can take a second argument, a string which specifies a character class to escape. "^A-Za-z" will escape everything but ASCII alphabetics.

    From the command line mine does ( with versions):

    $ perl -MURI::Escape -MHTTP::Request -e'my $ru=uri_escape("http://foo. +org/cgi-bin/bar.cgi?baz = qu ux;foo=dim");$v=new HTTP::Request(url=>" +http://foo.org/cgi-bin/bar.cgi?ru=$ru");print $v->url,$/,"URI::Escape + v",$URI::Escape::VERSION,$/,"Perl v",$],$/' http://foo.org/cgi-bin/bar.cgi?ru=http%3A%2F%2Ffoo.org%2Fcgi-bin%2Fbar +.cgi%3Fbaz%20%3D%20qu%20ux%3Bfoo%3Ddim URI::Escape v3.20 Perl v5.006001 $
    on Linux. I wonder if the difference is in defaults selected at build?

    After Compline,
    Zaxo

      The results are different because of different versions of URI::Escape.

        Jenda