Bernhard Peissl: Lösung für das leidige Umlautproblem bei Formularübergabe an PERL

Beitrag lesen

Hallo!

Hast Du Windows 2000?

Nein

Der Meinung bin ich auch. Bernhard sollte mal die Zeichensatz-
Einstellungen seines IE5 checken. Wenn er sie zurueck auf ISO-8859-1
stellt, gibt's da vermutlich keine Probleme mehr. Jedenfalls haengt
das ganz sicher nicht mit URL-Encoding oder sowas zusammen.

Ja gern, aber nur wo ??

Deshalb wuerde ich Bernhard mal bitten, dieses kleine Script
hochzuladen, mit dem IE5 zu besuchen, und uns dann den Output
hier zu posten.

#!/usr/bin/perl
    print "Content-type: text/plain\n\n";
    print "$_:\t\t$ENV{$_}\n" for (sort keys %ENV);

söben habe ich einen Fehler in Deinem Skript gefunden... ;-)

»»Ausserdem muss auf dem Browser JavaScript laufen, was alles andere als selbstverstaendlich ist.

Versteht sich doch!

Output:

AUTH_TYPE:  
BLASTER:  A220 I10 D1 H1 P300 T6
CMDLINE:  WIN
COMSPEC:  C:\WINDOWS\COMMAND.COM
CONTENT_LENGTH:  0
CONTENT_TYPE:  
GATEWAY_INTERFACE:  CGI/1.1
HTTP_ACCEPT:  image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
HTTP_COOKIE:  
HTTP_REFERER:  http://127.0.0.1/cgi-bin/shop.pl?f=sk2
HTTP_USER_AGENT: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
MIDI:  SYNTH:1 MAP:E
PATH:  C:\MyPrograms\httpd;C:\WINDOWS;C:\WINDOWS\COMMAND;C:\PERL\BIN;C:\WINDOWS\TWAIN_32\SCANWIZ;C:\MYPROG~1\HTTPD\PHP
PATH_INFO:  /cgi-bin/test.pl
PATH_TRANSLATED:  C:\MYPROGRAMS\HTTPD\CGI-BIN/test.pl
PROMPT:  $p$g
QUERY_STRING:  artnr=55&item=Personengesellschaftsrecht&amount=1&ats=170&eur=12.35&ats_sum=170&eur_sum=12.35&artnr=69&item=Pr%C3%BCf.+d.+Sachanlageverm%C3%B6gens&amount=1&ats=70&eur=5.09&ats_sum=70&eur_sum=5.09&vorname=%C3%BC%C3%BC%C3%BC%C3%BC%C3%9C%C3%9C%C3%9C%C3%9C&nachname=%C3%A4%C3%A4%C3%A4%C3%A4%C3%A4%C3%A4%C3%84%C3%84%C3%84&rechnungsadresse=%C3%B6%C3%B6%C3%B6%C3%B6%C3%B6%C3%96%C3%96%C3%96%C3%96&kanzlei=&Rechnung_an_Privat=on&plz=3567&ort=%C3%9F%C3%9F%C3%9F%C3%9F%C3%9F&staat=%C3%96sterreich&email=
REMOTE_ADDR:  127.0.0.1
REMOTE_HOST:  
REMOTE_IDENT:  
REMOTE_USER:  
REQUEST_METHOD:  GET
SCRIPT_NAME:  /cgi-bin/test.pl
SERVER_NAME:  localhost
SERVER_PORT:  80
SERVER_PROTOCOL:  HTTP/1.1
SERVER_SOFTWARE:  OmniHTTPd/2.06
SOUND:  c:\MYPROG~1\SB16
TEMP:  C:\WINDOWS\TEMP
TMP:  C:\WINDOWS\TEMP
WINBOOTDIR:  C:\WINDOWS
WINDIR:  C:\WINDOWS

Komisch, jetzt schreibt er den Windows-Unicode hin. Ich kenn mich jetzt gar nicht mehr aus. Hab mir den Tip von Oliver zu Herzen (und zur Tastatur) genommen, und es funktioniert, aber es würd mich schon interessieren, woran die ganze Palgerei liegt. Wenn mir das jemand sagen jönnte - wär toll!!

Seltsam ist auch, dass es (gestern) mit $text =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C',hex($1))/eg; ebenfalls nicht funktioniert hat, was, wenn ich mir den Query String so anschaue doch hätte funktionieren müssen. Aber ich habe gestern einfach soviel herumprobiert, bis es dann endlich funktioniert hat, und da war ich dann zufrieden!

So habe ich es jetzt gelöst: Bevor ich den Mail-Text ausgebe rufe ich folgende Funktion auf:

sub encode() {
   $mail_rows =~ s/ä/ä/g;   $mail_rows =~ s/Ä/Ä/g;
   $mail_rows =~ s/ü/ü/g;   $mail_rows =~ s/Ãœ/Ü/g;
   $mail_rows =~ s/ö/ö/g;   $mail_rows =~ s/Ã-/Ö/g;
   $mail_rows =~ s/ß/ß/g;
}

Meine Frage nun: wenn ich diese Funktion nicht aufrufe, schreibt er mir ä,ü,ö, usw. hin. Wenn man nochmal einen Blick auf den Query wirft, müsste er dann aber doch %BC%C3%9C% ausgeben oder?

Oder ist es vielleicht so, dass javascript seine Parameter mit unicode encoded, und PERL mit einer anderen Methode seine Parameter decoded, welche wiederum die Javascript-encoded Daten nicht decoden kann, und daher diese komischen Zeichen als ganz normale Characters decoded, wobei noch schlimmere Zeichen rauskommen? - Das war jetzt ziemlich unverständlich oder??

Wie übernimmt das CGI::Modul eigentlich die Parameter, wäre es vielleicht ohnehin gscheiter, den Query-String nur mit PERL (ohne CGI-Modul) zu übernehmen.

PS: Könnte mir vielleicht noch jemand erklären, was ich da gerade gemacht habe, und was da alles drinsteht ?? Iss ja arg viel Information !!

Verbleibe

in rasender Verzweiflung,
Bernhard