echo $begrüßung;
Sowohl die Eingabemaske als auch die verarbeitende PHP-Datei sind UTF-8 kodiert.
Lasse ich von der verabeitenden Datei die POST-Daten ausgeben, stimmt noch alles. Ich habe die Daten dann immer per htmlentities umformen lassen.
Warum das? Wenn du UTF-8 als Kodierung verwendest, kannst du doch quasi alle Zeichen dieser Welt direkt notieren. Im HTML-Kontext benötigst du nur htmlspecialchars(), um die HTML-eigenen Zeichen HTML-gerecht umzuwandeln.
Allerdings wird bspw. aus "Ä" nicht Ä sondern Ã,, . Ich vermute, dass der Fehler bei der Weitergabe der Daten via POST geschieht.
Hast du das überprüft? Lass dir die Daten ausgeben. var_dump() eignet sich für eine erste Überprüfung, weil es auch die Stringlänge in Bytes anzeigt. Ein Umlaut belegt in UTF-8 zwei Bytes. Als weiteres wäre eine Anzeige der Bytewerte sinnvoll, die man mit bin2hex() hinbekommt.
echo chunk_split(bin2hex($delinquent), 2, ' '); zeigt die Bytes gut lesbar einzeln an.
Hat vielleicht jemand eine Idee?
Zusammengefasst: ich schaffe es nicht, dass in der MySQL Datenbank die Umlaute richtig oder zumindest richtig konvertiert angezeigt werden.
Der häufigste Fehler ist, dass dem MySQL-Server nicht mitgeteilt wird, in welcher Kodierung man die Daten zu senden gedenkt und das Abfrageergebnisse haben möchte, sprich: die Verbindungskodierung wird nicht eingestellt. MySQL nimmt dann seine Default-Einstellung. In aktuellen PHP-Versionen gibt es mysql_set_charset(), ansonsten hilft das Absetzen eines SET NAMES-Statements zumindest für die hierzulande üblichen Kodierungen der Latin-Serie und UTF-8.
Dort hab ich auch schon mit den Kollationen rumprobiert, aber keine funktionierende gefunden.
An welcher Stelle? Für die Kodierung der Daten in den Feldern ist die für das jeweilige Feld eingestellte Kodierung zuständig. Die Kollation ist nur ein Sortierkriterium. Allerdings hängt Kodierung und Kollation voneinander ab. Die Kodierung der Tabelle oder Datenbank ist nur ein Default-Wert für neu angelegte Felder bzw. Tabellen, wenn diesen keine explizite Kodierungsangabe mitgegeben wurde.
Zwischen der Verbindungskodierung und der Feldkodierung nimmt MySQL Umkodierungen vor, wenn diese unterschiedlich sind. Wobei technisch bedingt nicht alles in jede Richtung umkodiert werden kann.
Wenn du mit diesen Hinweisen nicht zurecht kommst, müsstest du genauer beschreiben, wo genau was auf welche Weise falsch ist.
echo "$verabschiedung $name";