Hi!
ich versuche vergeblich meinen Server korrekt einzustellen, damit er mit dem Zeichensatz zurecht kommt.
Zeichenkodierung, aber egal.
Zuerst hatte ich das Problem, dass beim AJAX die Antwort fehlerhaft übermittelt wurde. Alle Umlaute etc. wurden nicht korrekt dargestellt.
Da müssen wir wohl bei den Grundlagen anfangen. In den HTTP-Headers steht eine wichtige Zeile: Content-Type. Die hat für Textdokument einen Parameter namens charset. Wenn der nicht gesetzt ist, darf der Browser ein gleichnamiges Meta-Element verwenden. Bei einer AJAX-Antwort wird oft nur ein Teil vom Dokument, oder anderer Text ohne Möglichkeit der charset-Angabe geliefert. Deshalb ist der genannte HTTP-Header wichtig, um dem Browser nicht das Raten zu überlassen. Und natürlich darfst du bei charset nicht einfach nach Gutdünken was reinschreiben, es muss vielmehr mit der tatsächlich verwendeten Kodierung übereinstimmen.
Daraufhin habe ich versucht den Server auf UTF-8 umzustellen. In der PHP.ini habe ich den default_charset = "utf-8" gesetzt.
Leider brachte dies auch nicht den erhofften erfolg. Viel schlimmer - nun wurden nicht nur bei AJAX Antworten die Umlaute falsch übermittelt, sonder auch bei normeln html/php files falsch dargestellt.
Ja, auf einen Briefumschlag etwas draufschreiben, konvertiert keinen Inhalt. default_charset setzt die oben erwähnte charset-Angabe. Man kann auch im Script einen Header inklusive charset mittels header() festlegen, denn nicht immer kann man die php.ini ändern.
Anschließend habe ich in PHP.ini den default-charset = "ISO-8859-1" gesetzt. Nun werden wenigstens alle Umlaute korrekt angezeigt - bis auf das € zeichen im Internetexplorer.
Das €-Zeichen ist in ISO-8859-1 nicht enthalten. Wenn du es als 0x80 kodierst, so wie es in Windows-1252 definiert ist, dann sollten die Browser eigentlich so gnädig sein, dir diesen Fehler zu verzeihen. Ansonsten hast du nicht die richtig Kodierung erwischt.
Wie mache ich es denn am besten?!?
Gib die Kodierung an, die du tatsächlich verwendest. Sorge dafür, dass dir stets klar ist, welche Kodierung vorliegt. Konkret betrifft das Übergänge zwischen zwei Systemen. Wenn die nicht für den konkreten Datenverkehr wissen, was da kommt, nehmen sie irgendeinen Defaultwert an oder raten irgendwas zusammen. Wenn Kodierungsangabe und Kodierung nicht übereinstimmen, gibt es Interpretationsfehler.
Lo!