Thread Problem mit Zeichensatz bei Ajax Webseite (37 answers)
Opened by bianca at 2018-11-01 15:05

haj
 2018-11-01 21:47
#189068 #189068
User since
2015-01-07
555 Artikel
BenutzerIn

user image
2018-11-01T18:11:39 bianca
2018-11-01T15:53:28 haj
Wie holst Du die Daten denn serverseitig ab?

Mit CPAN:CGI 4.22

Ja, CGI.pm hätte ich erwartet. Und danach? Vermutlich mit $query->param()?

2018-11-01T18:11:39 bianca
2018-11-01T15:53:28 haj
Möglicherweise kommt Dir da eine Komponente in die Quere, die die Daten schon vorher decodiert.

Was käme da in Frage?

Nach dem Aufruf von $query->param() sind die Daten meines Wissens nach nicht decodiert. Anders sieht's aus, wenn die Daten nach dem Aufruf einem XML- oder JSON-Parser vorgesetzt werden - der decodiert dann. Ich gehe aber nach Deiner weiteren Beschreibung (Validierung mit Regex) davon aus, dass das bei Dir nicht passiert, sondern dass der Inhalt eines einfachen Formularfelds drinsteht.

Mir ist allerdings nicht klar, warum Du nach dem decode_utf8() ein Fragezeichen (das vermutlich der Unicode-"Replacement Character" ist) bekommst, denn der zeigt an, dass der Input keine korrekte UTF8-Codierung enthält. Es wäre einen Versuch wert, beim Aufruf von decode_utf8 als zusätzlichen Parameter Encode::FB_CROAK zu übergeben. In dem Fall stirbt das Programm bei ungültigem UTF-8 und sagt, welcher Input ihm vorgesetzt wurde.

Nochmal zusammengefasst wie es funktionieren sollte: Wenn Du die Parameter sofort dekodierst, dann sollte auch das Pattern Matching die richtigen Resultate ergeben, auch wenn das Programm als ISO-8859-1 abgespeichert wurde (und dann natürlich kein use utf8 drinsteht):
Code (perl): (dl )
1
2
my $value = decode_utf8($query->param('value'),Encode::FB_CROAK);
print "Da ist ein à drin" if $value =~ /à/;


2018-11-01T18:11:39 bianca
2018-11-01T15:53:28 haj
Ich würde also erstens den Content-Type und zweitens den Bytestream ansehen, bei CGI geht das mit my $data = $query->param('POSTDATA');.

Ist nicht definiert. Was genau heißt das?

Das war mein Fehler: Das ist nur bei Content-Types versorgt, die CGI nicht auflösen kann. Sorry!

View full thread Problem mit Zeichensatz bei Ajax Webseite