]> mj.ucw.cz Git - libucw.git/commitdiff
Fix escaping of "+" characters in outgoing parameters. (BTW: when Galeon
authorMartin Mares <mj@ucw.cz>
Mon, 23 Sep 2002 12:37:32 +0000 (12:37 +0000)
committerMartin Mares <mj@ucw.cz>
Mon, 23 Sep 2002 12:37:32 +0000 (12:37 +0000)
displays link URL's in the status line, it unqotes them improperly!)

Use ":" as a separator instead of "&" when constructing self-ref URL's.

lib/perl/CGI.pm

index 286bca52f7a4fa0c5636de9be6891b3b68e8fcd2..462b0c43242ef41a7b1b3647c8605e249f5c05c1 100644 (file)
@@ -23,7 +23,7 @@ BEGIN {
 
 sub url_escape($) {
        my $x = shift @_;
-       $x =~ s/([^-\$_.+!*'(),0-9A-Za-z\x80-\xff ])/"%".unpack('H2',$1)/ge;
+       $x =~ s/([^-\$_.!*'(),0-9A-Za-z\x80-\xff ])/"%".unpack('H2',$1)/ge;
        $x =~ s/ /+/g;
        return $x;
 }
@@ -42,7 +42,7 @@ our $arg_table;
 sub parse_arg_string($) {
        my ($s) = @_;
        $s =~ s/\s+//;
-       foreach $_ (split /&/,$s) {
+       foreach $_ (split /[&:]/,$s) {
                (/^([^=]+)=(.*)$/) or next;
                my $arg = $arg_table->{$1} or next;
                $_ = $2;
@@ -106,7 +106,7 @@ sub make_out_args($) {
 sub self_ref(@) {
        my %h = @_;
        my $out = make_out_args(\%h);
-       return "?" . join('&', map { "$_=" . url_escape($out->{$_}) } sort keys %$out);
+       return "?" . join(':', map { "$_=" . url_escape($out->{$_}) } sort keys %$out);
 }
 
 sub self_form(@) {