molily: Aus Müller wird Müller beim Eintrag in Datenbank

Beitrag lesen

Hallo,

Möglicherweise hast Du auch gar kein echtes Problem, sondern die Software, die die Anzeige vornimmt, ist auf einen anderen Zeichensatz eingestellt, als das Vierquadrat aus Browser, Webserver, PHP und MySQL zum Browser(?) zurücksenden möchte.

Webserver, PHP und MySQL sind hier wahrscheinlich nicht verantwortlich.
Wahrscheinlich sendet ein Browser UTF-8-kodierte Formulardaten, die PHP dann als Oktetts direkt in die Datenbank schaufelt. Wird die Datenbank abgefragt und werden die Oktetts in ein ISO-8859-1-kodiertes HTML-Dokument geschrieben, kommt »Müller« heraus.

Um also nähere Hilfe geben zu können müssten wir schon wissen:

  • Welchen Zeichensatz vereinbarst Du im HTTP-Header mit dem Browser?
  • Welcher Zeichensatz steht im Content-Type des HTML- Dokumentes?
  • Welcher Zeichensatz steht als Angabe im Formular-Tag?
  • Welcher Zeichesatz ist bei der Datenbank eingestellt?
  • Welchen Zeichensatz erwartet die Software, mit der Du das Problem "gesehen" hast?

»Müller« kommt heraus, wenn die UTF-8-Bytesequenz, die den Text »Müller« repräsentiert, als ISO 8859-1 dekodiert wird.
Es ist ziemlich wahrscheinlich, dass

  • in der Datenbank sieben Bytes gespeichert sind, also UTF-8;
  • der Browser von ISO 8859-1 ausgeht;
  • der Webserver, MySQL und PHP damit nichts zu tun haben, sie verarbeiten nur Oktetts und scheren sich nicht um die Kodierung;
  • MySQL erst ins Spiel kommt, wenn bestimmte Internationalisierungs-Funktionen von Version 4.1 aktiviert sind.

Tatsächlich würde ich, wie du sagst, den Fehler bei der Kodierung des HTML-Dokuments bzw. beim accept-charset-Attribut eines möglichen Formulars suchen.

Im Übrigen ist es natürlich sinnvoll, generell UTF-8 zu verwenden, denn wenn man accept-charset="iso-8859-1" notiert, senden einige Browser Fragezeichen für eingegebene Zeichen außerhalb von ISO 8859-1, andere senden numerische Zeichenreferenzen, die man absolut ungerne in der Datenbank stehen haben will.

Mathias