Problem mit uri_unescape
Simon
- perl
Hallo,
bisher habe ich einem Skript den $ENV{'QUERY_STRING'}
genommen und diesen mit uri_unescape
"lesbar" gemacht.
Das funktionierte früher wie erwartet.
Jetzt, 3 Monate später wird das Skript wieder benötigt, und ich erhalte den "lesbaren" String aber erst, wenn ich das uri_unescape
zweifach ausführe.
use URI::Escape;
$ENV{'QUERY_STRING'} = "DATA=%253cALT+TYPE%253d%2522Auto%2522+SIG%253d%2522(vvv)%2522+SBSY%253d%2522(233)%2522+NOID%253d%252250%2522+SUM%253d%2522p322b%2522+MID%253d%252234-155%2522+PAS%253d%252299%2522+NAME%253d%2522REW+Q%252bT+MOSS%2522+METHOD%253d%25222%2522+IDO%253d%2522904%2522+KRI%253d%2522100%2522+WARW%253d%2522EER%2522+IP%253d%2522128.0.0.1%2522+IPC%253d%2522DE%2522+CCCO%253d%2522AF%2522+%252f%253e";
my $klartext = $ENV{'QUERY_STRING'};
print "Ausgabe des Strings ohne uri_unescape: " . $klartext . "\n"; #
$klartext = uri_unescape($klartext);
print "Ausgabe des Strings mit einem uri_unescape: " . $klartext . "\n";
$klartext = uri_unescape(uri_unescape($klartext));
print "Ausgabe des Strings mit zweifachen uri_unescape: " . $klartext . "\n";
# Ich habe noch mal ein dreifaches uri_unescape mit reingenommen, aber dieses ändert am Ergebnis nichts mehr.
$klartext = uri_unescape(uri_unescape(uri_unescape($klartext)));
print "Ausgabe des Strings mit dreifachen uri_unescape: " . $klartext . "\n";
Ich verstehe nicht, wie das sein kann.
Und auch nicht, warum ein einfaches uri_unescape
nicht sofort alles dekodiert.
Was habe ich da übersehen?
Danke Simon
hallo
Ich verstehe nicht, wie das sein kann. Und auch nicht, warum ein einfaches uri_unescape nicht sofort alles dekodiert. Was habe ich da übersehen?
Du verwendest mehrfaches Encoding, offensichtlich.
Das kann geschehen, indem du in den falschen Kontext bereits URI-kodierte Data einfügst (zum Beispiel in Formulare)
Beat hat Recht: Wenn einmal decodieren nicht den Klartext rausgibt, ist das Encoding im QUERY_STRING falsch.
Und normalerweis wird uri_unescape nicht auf den ganzen Querystring angewandt sondern nur auf den Parameter:
my($k,$par) = split /=/, $ENV{QUERY_STRING};
$par =~ s/\+/ /g;
$par =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
#$par =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
print $par;
MfG