UTF8: cgi ist staerker als ich

16/10/2007 - 16:40 von Martin Trautmann | Report spam
Hallo,

im Moment habe ich wieder mal Probleme mit UTF8 und CGI-Forms.

Einerseits verwende ich in einem eigenen CGI schon UTF:
http://fa-technik.adfc.de/code/opengeodb.pl

Wenn ich dort Umlaute eingebe (z.B. Muenchen mit richtigem ue), so
wirft er mir statt dessen das A-tilde ein-Viertel zurueck. Gebe ich dann
"muenchen" ein, so hat er gelernt, mit den Umlaut mit schrecklichem
Fragezeichen zurueckzugeben.

Eigentlich kann er mir das ganze aber auch richtig angeben, wenn die
Umlaute nicht ueber das Formfeld kamen.

Beispielsweise kommt
http://fa-technik.adfc.de/code/opengeodb.pl?locid5;c=D
auch mit Hindi oder Hebraeisch klar (ob die Schreibrichtung passt, wage
ich mal nicht zu bestaetigen).

Ich verwende
use locale
use encoding "utf8"

header(-charset => 'UTF-8')

Bei den Form-Einstellungen kann ich wohl wenig drehen.
start_form(-accept-charset=>"utf-8")
scheint nicht gemocht zu werden.

Mit Encode::guess oder CGI::ConvertParam habe ich's noch nicht probiert,
im (Irr-?) Glauben, das sollte auch so funktionieren. Woran liegt's?
Brauche ich eher striktes UTF? (utf-8, utf-8-strict)? Liegt's am locale,
das mit LANG=de_DE@euro arbeitet?

Andere Scripts dort arbeiten noch immer mit latin1 und haben keine
dieser Umlaut-Probleme



Ich habe aber auch in die umgekehrte Richtung meine Probleme: Mit
WWW::Mechanize kann ich schlichtweg nicht beeinflussen, wie ich Umlaute
uebergebe. Gibt es da Einflussmoeglichkeiten, um beim Submit den
Zeichensatz zu beeinflussen? Die Werte werden *grundsaetzlich* mit
%-Notation uebergeben, z.B. das ae als %C3%A4, auch wenn ich versuchte,
es mit &x00E4;, als ä und selbst als ä aufzurufen.
Anscheinend wird all das geprueft, sogar rekursiv, und in % umgewandelt.

Das dortige Formular erkennt die %-markierten Umlaute leider nicht. Kann
ich an irgendwelchen Stellschrauben drehen, in welcher Codierung ich die
Suchabfrage uebergebe?

Danke,
Martin
 

Lesen sie die antworten

#1 Bjoern Hoehrmann
16/10/2007 - 17:10 | Warnen spam
* Martin Trautmann wrote in de.comp.lang.perl.cgi:
Wenn ich dort Umlaute eingebe (z.B. Muenchen mit richtigem ue), so
wirft er mir statt dessen das A-tilde ein-Viertel zurueck. Gebe ich dann
"muenchen" ein, so hat er gelernt, mit den Umlaut mit schrecklichem
Fragezeichen zurueckzugeben.



Da gibt es zwei Möglichkeiten: entweder sind die Daten UTF-8 kodiert und
du làsst sie als ISO-8859-1 o.à. anzeigen, oder die Daten sind doppelt
UTF-8 kodiert. Das passiert zum Beispiel wenn der Browser die Daten als
UTF-8 sendet, das CGI-Skript das als ISO-8859-1 interpretiert, und die
dann dann wieder UTF-8 kodiert ausgibt. Beispiel:

% perl -MEncode -MCGI=param -e
"print encode_utf8(param('x'))" x=Bj%c3%b6rn

Das sollte die Bytes "42 6A C3 83 C2 B6 72 6E" ausgeben. Richtig wàre:

% perl -MEncode -MCGI=param -e
"print encode_utf8(decode_utf8(param('x')))" x=Bj%c3%b6rn

Das sollte die Bytes "42 6A C3 B6 72 6E" ausgeben.

Das dortige Formular erkennt die %-markierten Umlaute leider nicht. Kann
ich an irgendwelchen Stellschrauben drehen, in welcher Codierung ich die
Suchabfrage uebergebe?



Was heisst das Formular erkennt die nicht?
Björn Höhrmann · mailto: · http://bjoern.hoehrmann.de
Weinh. Str. 22 · Telefon: +49(0)621/4309674 · http://www.bjoernsworld.de
68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/

Ähnliche fragen