Hi!
sub InitQuery() {
my @args;
my ($field, $value);%query = ();
@args = split(/&/, $ENV{'QUERY_STRING'});
for (@args) {
$_ =~ s/%3D/=/gi; # aeltere Browser uebergeben unter Umstaenden %3D statt =
($field, $value) = split(/=/, $_);
$value =~ s/+/ /g; # + durch Leerzeichen ersetzen
$value =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/ge; # Hexa-Angaben -> echte Zeichen
$query{$field} = $value;
}
}Du solltest insbesondere testen, was passiert, wenn die uebergebenen Daten (was halt im Formular eingegeben wurde) selbst ein oder mehrere = enthalten. Please post any results in this forum. Wenn Du trotzdem lieber die add.cgi/german -Variante bevorzugst, denn schau mal in den beiden letzten Archiv-Dateien, vor kurzem hatte glaube ich mal jemand was dazu geschrieben.
Ein = in den Parametern macht doch kein Problem, da dieses innerhalb des Query-Stings durch den Hexwert kodiert ist. Das Programm splittet ja auch erst am = und ersetzt dann alle Hexangaben durch die entsprechenden Zeichen (z.B. das =). Für die Kodierung der Eingaben ist im übrigen der Browser zuständig.
Vergiss nicht die Zeile $_ =~ s/%3D/=/gi; ! Sie wandelt noch vor dem split() alle als %3D uebergebenen = in ein richtiges = um. Ich habe das gamacht, weil ich es mit MS IE 3 schon erlebt habe, dass er, falls man das Script mit einer HREF aufruft, eben das = als zum Dateinamen zugehoerig betrachtet und daher in das %3D umgewandelt hat. Das Problem, das ich jetzt bei dieser Zeile vermutet habe, ist: Beinhaltet der Wert (das was hinter dem = steht) seinerseits auch ein =, kommen demnach also mehrere %3D's im $_ vor, werden nach dieser Zeile wieder mehrere = dort stehen, und es ist zu befuerchten, das split() auf die Schnauze faellt (ich weiss ja nicht, wie es ganz genau arbeitet); es muesste in diesem Fall ja mehr als nur zwei Skalare zurueckliefern. Inzwischen ist mir aber ne ganze billige Abhilfe fuer das Problem eingefallen: Lasse das g als Option weg, also nur
$_ =~ s/%3D/=/i; dann wird nur das erste Auftreten von %3D ersetzt und alles sollte in Butter sein (denk ich jetzt mal).
(Hoffentlich nicht zu kompliziert formuliert),
Calocybe