Hallo Alle,
Nachdem ich diese Woche schon fast zwei Fragen gestellt hätte, aber bisher immer im letzten Moment das Problem lösen könnte, weil ich bis dahin zu blöd war *g*, komme ich jetzt wohl nicht umhin, eine zu stellen. ;)
In einer Seite möchte ich per SSI cmd exec aus dem $QUERY_STRING Parameter extrahieren, um sie an verschieden URLs wieder anhängen zu können.
Dazu verwende ich folgende Anweisung:
<!--#exec cmd="perl -we "($q)=$ARGV[0]=~/query_a=([^&]+)/;$q=~s/%([a-fA-F0-9]{2})/pack("C",hex($1))/eg;print $q" $QUERY_STRING" -->
Ein Beispiel-Querystring sieht wie folgt aus und wird auch von <!--#echo var="QUERY_STRING" --> so ausgegeben:
query_a=sig%3Dabcdef123%26var%3Dval&query_b=sig%3Dabcdef123%26var%3Dval
Das Extrahieren funktioniert auch ganz gut, nur das anschließende URL-decoden macht mich noch ganz wuschig. ;)
So wie es oben steht, gibt es keine Ausgabe und keine Fehlermeldung. Maskiere ich % mit \ hat das den selben Effekt wie vorher. Nur wenn ich z.B. s/%3D/X/ schreibe, wird "sig%3Dabcd" zu "sigXabcd". Möchte ich mit s/%/X/ nur die % austauschen, gibt es wieder keine Ausgabe und keine Fehlermeldung. Bei s/%253D/X/ (als URL-Codierung von %) wird der extrahierte Parameter - also $q - unverändert ausgegeben.
Deshalb vermute ich, daß dieses seltsame Verhalten etwas mit der Codierung von % zu tun hat.
Was muss ich nun tun, um mein Vorhaben wie oben umzusetzen?
Ich könnte natürlich auch ein kleines Skript schreiben, daß mir die Arbeit abnimmt, oder ich lade URI::Escape. Aber mir geht es auch um die prinzipielle Klärung, weil so was wie <!--#exec cmd="perl -we "%h = (1,2,3,4); print keys %h;"" --> so eben auch nicht "funktioniert". :)
Gruß Alex