Ich habe gerade ein Problem mit Codierungen und zwar werden ‘ß’ als � angezeigt. Die Daten liegen in einer Mysql-Tabelle. Die Datei, in der die Eingaben gemacht werden ist utf-8, die Kollation der Mysql-Tabellen ist utf8_bin und die Datei in der die Daten ausgegeben werden ist auch utf-8.
Wenn ich Sonderzeichen direkt in die Datei schreibe, dann werden sie richtig angezeigt. Es muss also irgendwie mit der Datenbank zusammenhängen.
Wenn Datenbankfelder in UTF-8 definiert sind, Dokument in UTF-8 ist, und nach dem Setzen der Verbindungskodierung auf UTF-8 die Zeichen nicht mehr “stimmen” - dann sind sie vermutlich schon falsch in der DB drin.
Das Aushandeln der für die Verbindung PHP - MySQL verwendeten Kodierung ist wichtig - denn wenn die auf einem falschen (Default-)Wert steht, dann kodiert die Datenbank ein- und ausgehende Daten selbstständig um.
Btw:
Dass das blödsinnig ist, so lange du das Dokument als text/html auslieferst, ist dir bewusst …?
Sorry, ich hatte das mit dem Web-Sniffer getestet, und der sendet keinen HTTP_ACCEPT-Header. (Was dann übrigens auch prompt zu Undefined index-Meldungen führt - du solltest also erst mal überprüfen, ob es den Eintrag in $_SERVER überhaupt gibt, bevor du ihn auszuwerten versuchst.)
Kann es sein, dass die Daten, die vom Client aus dem Formular kommen noch eine andere Codierung aufweisen und ich bevor ich die Daten in die Datenbank eintrage ein utf8_encode() drüberlaufen lassen muss?
In der DB sind sie nicht richtig kodiert, d.h. du musst die Daten vor dem Eintragen durch utf8_encode laufen lassen (und warscheinlich beim ausgeben auch).
Wie es mit mysql_set_charset aussieht, weiß ich leider auch nicht genau.