IE dekodiert URL vom Mime-Type x-www-form-urlencoded
christian
- browser
Hallo,
ich habe hier ein seltsames Problem mit dem guten alten IE 6.0(grrrrr).
Auf meiner Seite habe ich Link der auf eine Javaskriptfunktion verweist, in der Art:
---------------------------
<A HREF="OeffneCGI('/cgi-bin/my_cgi.exe?name=z%C4hler')" .... </A>
---------------------------
Das %C4 ist dabei die übliche URL-Codierung für Ä.
Die Javascriptfunktion dazu sieht so aus
(in Wircklichkeit macht sie noch mehr.
Das ist hier aber nicht entscheidend,
aber ich kann den Link nicht direkt in den A-Tag setzen):
---------------------------
function OeffneCGI(URI) {
Frame=parent.ergebnisse_output;
Frame.location.href = URI;
}
---------------------------
Das ganze funktioniert mit Netscape wunderbar.
Nur der Explorer bringt bei aktivierung des Links die Fehlermeldung:
---------------------------
Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.
Fehlermeldung:
couldn't create child process: 22:
E:/cgi-bin/my_cgi.exe
---------------------------
Durch ein paar Nachforschungen habe ich dann in der access-log des Webservers
(Apache 2.0 Windows) gesehen, dass der Request
---------------------------
"GET /cgi-bin/my_cgi.exe?name=zÄhler HTTP/1.1" 200 5543
---------------------------
beim Server ankam, was wegen dem Ä natürlich schiefgeht.
Bei Netscape sieht der Request wie erwartet dann so aus
---------------------------
"GET /cgi-bin/my_cgi.exe?name=z%c4hler HTTP/1.1" 200 5543 was dann ok ist.
---------------------------
Das heisst, dass der IE meine mühsam erstellten MIME-Codierungen einfach
wieder rückgängig macht und den fehlerhaften Request dann sendet.
Kann mir irgendjemand von euch sagen wie ich das dem IE abgewöhnen kann????
Gruss
Christian
Moin Moin !
Stochern im Nebel: Probier mal, was bei
<A HREF="OeffneCGI('/cgi-bin/my_cgi.exe?name=z%25C4hler')" .... </A>
passiert. Der IE müßte dann korrekt %C4 in den HTTP-Request schreiben, ich bin mir nur nicht sicher, was der Netscape 4 macht.
Alexander
Stochern im Nebel: Probier mal, was bei
<A HREF="OeffneCGI('/cgi-bin/my_cgi.exe?name=z%25C4hler')" .... </A>passiert. Der IE müßte dann korrekt %C4 in den HTTP-Request
schreiben, ich bin mir nur nicht sicher, was der Netscape 4 macht.
Das ist ja wohl ein genial bis teuflischer Trick!!
Da ja %25 die Codierung für % ist ist klar, dass der IE aus %25C4 %C4 macht und der Request damit funktioniert. Soweit. So gut.
Netscape lässt den URI aber unverändert, d.h. es kommt auch
%25C4 an. Ich hab mich erst tierisch gewundert, warum es bei Netscape auch funktionert, d.h. die Parameter aus der URL richtig geparst werden.
Ist mit jetzt aber auch klar. Erst wird (in meinem Algorithmus)
%25C4 zu %C4 und dann aus %C4 das Ä. Man muss nur darauf achten, dass man beim parsen der Argumente das %25 als erstes ersetzt. WOW
Danke
Christian
Hi!
%25C4 an. Ich hab mich erst tierisch gewundert, warum es bei Netscape auch funktionert, d.h. die Parameter aus der URL richtig geparst werden.
Ist mit jetzt aber auch klar. Erst wird (in meinem Algorithmus)
%25C4 zu %C4 und dann aus %C4 das Ä. Man muss nur darauf achten, dass man beim parsen der Argumente das %25 als erstes ersetzt. WOW
Aeh.. und was ist, wenn mal wirklich ein % uebergeben werden soll? Das wird dann auch doppelt dekodiert und ist damit ueber den Jordan. Mag sein, dass das bei Dir nicht vorkommt, aber eine "Loesung", die den Namen verdient, ist das obige nicht.
Vielleicht waere es einfacher, keine Umlaute in Dateinamen zu verwenden?
So long
Aeh.. und was ist, wenn mal wirklich ein % uebergeben werden soll?
Das ist in diesem Rahmen kein Problem. Der Webserver bricht nur ab wenn Umlaute in einem Request vorkommen, d.h. nur diese müssen entsprechend behandelt werden (also statt %C4 %25C4).
Vielleicht waere es einfacher, keine Umlaute in Dateinamen zu verwenden?
Die Umlaute kommen nicht in Dateinamen vor, sondern sind Beschriftungen von Submitbuttons. Für eine saubere Lösung halte ich das auch nicht (sauber wäre, wenn der IE seine Finger von dem Request liese), aber durchaus für einen vernünftigen Workaround.
Gruss
Christian
Moin Moin !
Stochern im Nebel: Probier mal, was bei
<A HREF="OeffneCGI('/cgi-bin/my_cgi.exe?name=z%25C4hler')" .... </A>
Tja, nachdem das wohl mit dem IE funktioniert, schlage ich vor, Du baust das wieder Standard-konform um und änderst die OeffneCGI-Funktion so, daß sie nur für den IE (navigator.userAgent.indexOf('IE')>0 && navigator.userAgent.indexof('Opera')<0) die escape()-Funktion von Javascript nochmal auf die URL anwendet, bevor Du irgendwas mit der URL machst.
Alexander