kyrillische Zeichen im IE
Electronix
- datenbank
0
Gunnar Bittersmann
0 Vinzenz Mai0
dedlfix
0 Electronix0
dedlfix
Version: MySQL 5.0
Hallo zusammen,
ich habe folgendes Problem:
Ich habe eine Website programmiert, auf welcher der Administrator die Texte per Formular selber schreiben kann. Die Texte werden in einer MySql Datenbank mit Kollation utf8_unicode_ci gespeichert. Wenn ich nun unter Firefox kyrillische Zeichen in das Formular eingebe und absende, werden die Zeichen folgendermaßen in die Tabelle eingefügt:
Парт
Diese Werden auch korrekt auf der Intrnetseite dargestellt. Wenn ich nun allerdings im InternetExplorer den gleichen Vorgang wiederhole, schreibt er in die Tabelle so etwas:
Ëþäìèëà
Und das wird auch auf der Seite angezeigt. Allerdings habe ich das Gar nicht so eingegeben, sprich, der Inhalt der Tabelle ist von vornherein falsch.
Woran kann das liegen und wie kann ich das beheben?
Mit freundlichen Grüßen,
Electronix
@@Electronix:
werden die Zeichen folgendermaßen in die Tabelle eingefügt:
Парт
Schon das ist nicht gut. Es sollten keine Zeichenreferenzen, sondern die richtigen Zeichen in der DB stehen, also "Парт".
In welcher Codierung liegt deine Webseite vor? In welcher Codierung schickt das Client die Daten aus dem Formular zum Server?
Live long and prosper,
Gunnar
In welcher Codierung liegt deine Webseite vor? In welcher Codierung schickt das Client die Daten aus dem Formular zum Server?
Die Codierung der Seite ist ISO-8859-1 aber wie bekomme ich raus, in welcher Codierung die Daten verschickt werden?
Electronix
In welcher Codierung liegt deine Webseite vor? In welcher Codierung schickt das Client die Daten aus dem Formular zum Server?
Die Codierung der Seite ist ISO-8859-1 aber wie bekomme ich raus, in welcher Codierung die Daten verschickt werden?
indem du dir die http-header zu gemüte führst oder in der serverkonfiguration nachsiehst
im kontextmenu [1] des firefox findest du auch entsprechende informationen unter "seiteninformationen anzeigen"
[1] rechte maustaste in die seite klicken
echo $begrüßung;
In welcher Codierung liegt deine Webseite vor? In welcher Codierung schickt das Client die Daten aus dem Formular zum Server?
Die Codierung der Seite ist ISO-8859-1 aber wie bekomme ich raus, in welcher Codierung die Daten verschickt werden?
In ISO-8859-1 gibt es keine kyrillischen Zeichen. Der Browser kann diese Zeichen also nicht in ISO-8859-1 kodiert zurücksenden. Er nimmt nun eine Ersatzdarstellung in Form der nummerischen Zeichenreferenzen. Zumindest der FF. Der IE verhält sich deiner Schilderung gemäß anders. Dieser Fall ist nicht geregelt, so dass man das Verhalten nicht als richtig oder falsch deklarieren kann. Du kannst nur dafür sorgen, dass alle Beteiligten eine passende Kodierung verwenden, UTF-8 beispielsweise.
echo "$verabschiedung $name";
Hallo,
Ich habe eine Website programmiert, auf welcher der Administrator die Texte per Formular selber schreiben kann. Die Texte werden in einer MySql Datenbank mit Kollation utf8_unicode_ci gespeichert. Wenn ich nun unter Firefox kyrillische Zeichen in das Formular eingebe und absende, werden die Zeichen folgendermaßen in die Tabelle eingefügt:
Парт
warum? Warum wird die Eingabe in etwas unlesbares umgewandelt?
Warum speicherst Du die Eingabe nicht so, wie sie erfolgt?
Freundliche Grüße
Vinzenz
echo $begrüßung;
Version: MySQL 5.0
Das ist an deinem Problem unbeteiligt. Möglicherweise hast du aber auch da vergessen, eine Kodierung explizit auszuhandeln. Aber der Reihe nach.
Wenn ich nun unter Firefox kyrillische Zeichen in das Formular eingebe und absende, werden die Zeichen folgendermaßen in die Tabelle eingefügt: Парт
Wenn ich nun allerdings im InternetExplorer den gleichen Vorgang wiederhole, schreibt er in die Tabelle so etwas: Ëþäìèëà
Du hast, so wie es aussieht, dem Browser keine Angaben zur Kodierung der Webseite gemacht oder das accept-charset-Attribut des Formulars weggelassen oder beides. Der Browser sendet dir nun die Daten, wie er es für richtig hält.
Woran kann das liegen und wie kann ich das beheben?
Sendet der Webserver einen Content-Type-Header mit charset-Angabe? Das kannst dü beispielsweise mit der livehttpheader-Extension für den Firefox prüfen. Diese Angabe hat Vorrang vor einer gleichlautenden Angabe in einem Meta-Element des HTML-Dokuments. Normalerweise nehmen die Browser dann auch diese Angabe, um die Formulardaten zu kodieren, aber das accept-charset-Attribut des form-Elements zu setzen ist ja kein Aufwand.
Die Texte werden in einer MySql Datenbank mit Kollation utf8_unicode_ci gespeichert.
Damit das auch wirklich passiert, sollte der Client mit dem MySQL-Server die auf seiner Verbindung verwendete Kodierung aushandeln, ansonsten nimmt MySQL an, dass die Daten gemäß einer Default-Konfigurierung ankommen. Wenn diese nicht der Feld-Kodierung (jedes Feld muss einzeln betrachtet werden. Eine Tabellen- und Datenbank-Konfiguration ist unerheblich) entspricht kodiert MySQL die Daten um. Es muss aber korrekt kodierte Daten haben, sonst kann es nicht richtig sortieren und andere String-Funktionen richtig anwenden.
Zum Aushandeln der Kodierung gibt es das SET NAMES-Statement oder korrekterweise die Funktion mysql_set_character_set() der Client-API, für die es hoffentlich in deinem Programmiersystem eine Entsprechung gibt.
echo "$verabschiedung $name";
Hallo,
Danke an alle! Problem gelöst. Alles funktioniert.
Was ich geändert habe:
-Collation der Tabelle auf UTF8 gesetzt.
-SET NAMES 'utf8'
-<meta http-equiv="content-type" content="text/html; charset=utf-8">
-Bei den Formularen: accept-charset="utf-8"
Danke nochmal!
Mit freundlichen Grüßen,
Electronix
echo $begrüßung;
-Collation der Tabelle auf UTF8 gesetzt.
Das reicht nicht, wenn die Felder vorher auf etwas anderem standen. Die Tabellenkonfiguration ist nur ein Defaultwert für neu zu erstellende Felder. Prüfe und konfiguriere jedes Feld einzeln.
Der Rest war o.k.
echo "$verabschiedung $name";
echo $begrüßung;
-Collation der Tabelle auf UTF8 gesetzt.
Das reicht nicht, wenn die Felder vorher auf etwas anderem standen. Die Tabellenkonfiguration ist nur ein Defaultwert für neu zu erstellende Felder. Prüfe und konfiguriere jedes Feld einzeln.
Der Rest war o.k.
echo "$verabschiedung $name";
Ich hatte die Felder schon alle auf UTF8 gesetzt und habe den Standart nun auch verändert, das meinte ich.
Trotzdem Danke,
Electronix