AlexBausW: Apache SSI exec: Encoding von cmd="..."

Beitrag lesen

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