Aus Müller wird Müller beim Eintrag in Datenbank
Whitesnake
- php
0 Joerg0 Marc Reichelt0 fastix®0 Marc Reichelt0 fastix®
0 molily
0 Cruz2 dedlfix
Der Titel sagt schon das Problem. Umlaute und scharfe ß werden in einen sehr interessanten Zeichensatz in die Datenbank eingetragen. Wie kann ich das abfangen, liegts am php oder liegts an der Einstellung der Datenbanktabelle?
Hi,
Der Titel sagt schon das Problem. Umlaute und scharfe ß werden in einen sehr interessanten Zeichensatz in die Datenbank eingetragen.
Es liegt daran, dass ein Teil des (Betriebs-)Systems den Zeichensatz auf Unicode bzw. UTF-8 umgestellt hat (www.unicode.org), ein anderer Teil - oder der Client - noch nicht.
Zum Abfangen kann ich Dir leider keinen Tip geben - ich habe meine Systeme allesamt wieder von UTF-8 auf "C" (ISO-8859-1) zurueckgesetzt, weil ich einfach zuviele Anwemndungen habe, die sich da noch verschlucken.
Gruss aus Lausanne,
Hallo Whitesnake,
Der Titel sagt schon das Problem. Umlaute und scharfe ß werden in einen sehr interessanten Zeichensatz in die Datenbank eingetragen. Wie kann ich das abfangen, liegts am php oder liegts an der Einstellung der Datenbanktabelle?
Am Zeichensatz deines HTML-Dokuments und/oder an dem ausgesendeten Zeichensatz deines Servers. PHP will ISO-8859-1 haben, und MySQL kommt damit auch zurecht.
Grüße
Marc Reichelt || http://www.marcreichelt.de/
Moin!
Erst beim Eintrag in die Datenbank oder schon vorher?
Eventuell hilft Dir, neben der richtigen Einstellung des Zeichensatzes für das Formular und die Datenbank, auch
utf8_decode
oder
utf8_encode
Mit welchem Browser hast Du das getestet?
Ich glaube mich daran zu erinnern, irgendwo gelesen zu haben, dass der Firefox aus Formularen trotz explizit eingestellten UTF8 ISO8859-1 senden soll.
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.
Um also nähere Hilfe geben zu können müssten wir schon wissen:
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo fastix®,
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?
Ist das Ganze an mich gerichtet, oder ist Whitesnake damit gemeint? ;-)
Grüße
Marc Reichelt || http://www.marcreichelt.de/
Moin!
Hallo fastix®,
Ist das Ganze an mich gerichtet, oder ist Whitesnake damit gemeint? ;-)
Ja. Sorry. Ging natürlich an Whitesnake. Da der aber sich aber als Fragender sicher den ganzen Thread "reinzieht" kann ich bestimmt darauf verzichten mittles C&P zu dublizieren.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
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
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
Hallo Whitesnake,
niemand kann mit Bestimmtheit sagen an welcher Stelle in deinem System die Umlaute verfälscht werden, aber dass es ein Zeichensatz Problem ist ist klar. In der Regel ist es die letzte _anzeigende_ Instanz, die soetwas verursacht.
Du solltest erstmal den Weg der Daten Schritt für Schritt verfolgen und an jedem Checkpoint überprüfen, ob die Bytes irgendwo umgeschrieben wurden. Das kannst du z.B. mit einem Hex-Editor machen. Das ü z.B. müsste die Byte Nr. 129 haben (laut ascii tabelle). Der kritischste Punkt ist, ob der Browser den du verwedest das ü auch mit dem richtigen Byte übermittelt.
Wenn das Byte durchweg in Ordnung ist, wovon ich eigentlich ausgehe, dann ist das Problem nur ein visueller Fehler den vielleicht dein Shell-Client oder womit du auch in die Datenbank geschaut hast durch einen falschen Zeichensatz bereitet.
Gruß,
Cruz
echo $begrüßung;
Neben den anderen Hinweisen möchte ich hier noch auf diesen Artikel hinweisen, der sich ebenfalls mit der "BUMP"-Problematik (Browser, Unicode, MySQL und PHP) und beschäftigt:
http://dev.mysql.com/tech-resources/articles/4.1/unicode.html
echo "$verabschiedung $name";