v3.11 release
[perl/plp/.git] / PLP / Fields.pm
index 99455110d1b53cef47f84db3dad37d12dd52d518..14d30b65b83028156ec4d440dd08d7daaa618179 100644 (file)
@@ -10,14 +10,18 @@ PLP::Script. Also generates %cookie immediately.
 
     PLP::Fields::doit();
 
+This module is part of the PLP internals. Don't use it yourself.
+
 =cut
 
 sub doit {
     tie %PLP::Script::get, 'PLP::Tie::Delay', 'PLP::Script::get', sub {
        my %get;
-       if ($ENV{QUERY_STRING} ne ''){
-           for (split /[&;]/, $ENV{QUERY_STRING}) {
-               my @keyval = split /=/;
+       my $get;
+       $get = $ENV{QUERY_STRING};
+       if ($get ne ''){
+           for (split /[&;]/, $get) {
+               my @keyval = split /=/, $_, 2;
                PLP::Functions::DecodeURI(@keyval);
                $get{$keyval[0]} = $keyval[1] unless $keyval[0] =~ /^\@/;
                push @{ $get{'@' . $keyval[0]} }, $keyval[1];
@@ -28,11 +32,16 @@ sub doit {
 
     tie %PLP::Script::post, 'PLP::Tie::Delay', 'PLP::Script::post', sub {
        my %post;
-       our $post = <STDIN>;
+       my $post;
+       if ($ENV{MOD_PERL}) {
+           $post = Apache->request->content;
+       } else {
+           read(*STDIN, $post, $ENV{CONTENT_LENGTH});
+       }
        if (defined($post) && $post ne '' &&
            ($ENV{CONTENT_TYPE} eq '' || $ENV{CONTENT_TYPE} eq 'application/x-www-form-urlencoded')){
-           for (split /[&;]/, $post) {
-               my @keyval = split /=/;
+           for (split /&/, $post) {
+               my @keyval = split /=/, $_, 2;
                PLP::Functions::DecodeURI(@keyval);
                $post{$keyval[0]} = $keyval[1] unless $keyval[0] =~ /^\@/;
                push @{ $post{'@' . $keyval[0]} }, $keyval[1];
@@ -50,7 +59,7 @@ sub doit {
 
     if (defined($ENV{HTTP_COOKIE}) && $ENV{HTTP_COOKIE} ne ''){
        for (split /; ?/, $ENV{HTTP_COOKIE}) {
-           my @keyval = split /=/;
+           my @keyval = split /=/, $_, 2;
            $PLP::Script::cookie{$keyval[0]} ||= $keyval[1];
        }
     }