Calocybe: string übergabe an perl script (Problem mit Leerzeichen)

Beitrag lesen

Moin

im falle von strings ohne leerzeichen funktioniert dies ohne probleme (z.b. "Eintrag1". Sobald ich aber ein String (z.B. "Erster Eintrag") übergebe wird im Perl script "Erster%20Eintrag" eingelesen.

Ja, Sonderzeichen, die nicht in URLs vorkommen duerfen, werden durch ein % gefolgt vom hexadezimalen ASCII-Wert des Zeichens codiert. Ebenso Zeichen, die in URLs Sonderbedeutungen haben, z.B. @ -> %40, / -> %2F, & -> %26 usw.

Die Frage ist nun: Wie kann ich nun den mit "Erster%20Eintrag" gekoppelten wert direkt ansprechen?

$value =~ tr/+/ /;
$value =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/ge;

(Mit der ersten Zeile werden + in Leerzeichen verwandelt, da manchmal ein Leerzeichen nicht mit %20, sondern mit + coiert wird.)

Du musst darauf achten, welchen Teil Du so bearbeitest. Fuehrst Du das global ueber den ganzen Querystring (bzw. die von STDIN gelesenen Daten) aus, verwandelst Du auch evtl. vorhandene %26 zurueck nach &, weshalb ein spaeteres split() auch an diesen Stellen splitten wuerde. Aehnliches gilt fuer = Zeichen. Also *erst* splitten, dann unescapen (so nennt man das).

Bye, Calocybe