Tach!
in der .htacces wurde eine Headder-Information an den Browser geschickt mit dem Charset iso-8859-1. Dadurch wurde mein Charset ignoriert.
Erst hab ich das Formular auf "accept-charset="UTF-8" gestellt, dann ging schon mal alles bis zur MySQL Tabelle gut und erst beim auslesen traten wieder Fehler auf.Mit der falschen HTTP-Header-Angabe ist das kein Problem vom Auslesen (vorausgesetzt, das DBMS-Handling ist soweit in Ordnung, also mit korrekt ausgehandelter Verbindungskodierung). Das könntest du feststellen, wenn du dir die Daten ansiehst, die direkt aus dem DBMS kommen. Deren Bytewerte müssten den entsprechenden UTF-8-Sequenzen der jeweiligen Zeichen entsprechen. Durch das ISO-8859-1 in Richtung Browser interpretiert dieser jedoch das UTF-8 nicht richtig. Also ist das ein Problem beim Anzeigen.
Das accept-charset im Form-Element kann man nehmen, muss man aber letzlich nicht. Zumindest einige ältere Browser ignorieren diese Angabe und wenn man sich darauf verlässt, hat man verloren. Es klappt aber üblicherweise immer, dass die Browser die Kodierungsangabe der Seite für die Kodierung der Formulardaten heranziehen.
(Gleiches auch als ich davor noch "utf8_encode()" ausprobierte.
Wenn du noch solche und ähnliche Konvertierungen (außer der Kontextwechselbehandlung) zu benötigen glaubst, hast du noch Baustellen offen auf dem Weg hin zu vollständiger UTF-8-Verarbeitung.
Diese Baustellen waren ja nur um zu sehen wo das Problem steckt.
Mit "Accept Charset" habe ich dafür gesorgt, das er das Formular in utf-8 sendet und nicht in ISO-8859-1, da er bei falschem Headder ja auch das falsche formular charset sendet. Das war dann anfangs auch der grund weshalb er es nicht in der DB speichern konnte. Mit dem utf8_encode habe ich das selbe gemacht - aber eben auch nur zu testzwecken.
Wenn ich nicht weiß wo der Fehler sitzt probiere ich einfach viel aus um die stelle zu finden wo es hakt.
Jetzt verwende ich das natürlich nicht mehr, ich kann die Daten einfach so speichern ohne hin und her zu codieren. Nur html entieties verwende ich noch (es sollte doch eigentlich egal sein, ob ich die funktion vor dem speichern oder beim auslesen verwende? Aber so kann ich sie in der Speicherfunktion verwenden und muss sie nicht auf verschiedenen Seiten jeweils extra beim auslesen angeben und brauche mir keine sorgen zu machen sie mal zu vergessen und dann von einem Witzbold ein </div> oder so in mein HTML zu bekommen.)
Und mysql_real_escape_string() verwende ich jetzt vor dem speichern nun auch noch, vielen dank, dass ihr mich auf die Funktion aufmerksam gemacht habt. Ich arbeite eben noch nicht sehr lange mit php.
gruß
Amerlander