Hallo
Erstmal zum Grundsätzlichen: Es gut um einen Gutscheinblog. Ich habe in PHP eine Eingabemaske für Gutscheine gemacht, welche die Daten per $_POST an eine weite PHP-Datei schickt, welche diese Daten in eine MySQL-Datenbank einfügt. Das ganze funktioniert bis auf die Umlaute und Sonderzeichen auch sehr gut.
Sowohl die Eingabemaske als auch die verarbeitende PHP-Datei sind UTF-8 kodiert.
schon mal gut.
Lasse ich von der verabeitenden Datei die POST-Daten ausgeben, stimmt noch alles. Ich habe die Daten dann immer per htmlentities umformen lassen.
Diese Umformung ist im SQL-Kontext völlig überflüssig, ja sogar schädlich.
Speichere Rohdaten.
Allerdings wird bspw. aus "Ä" nicht Ä sondern Ã,, . Ich vermute, dass der Fehler bei der Weitergabe der Daten via POST geschieht.
Ich kann überhaupt nicht verstehen, warum man sowas speichern will. UTF-8 ist doch wunderbar. Wenn ein Ä eingegeben wird, dann speichere ein Ä - und nichts anders.
Hat vielleicht jemand eine Idee?
Entsorge htmlentities beim Abspeichern in der Datenbank, sorge dafür, dass der Client UTF-8 mit dem Server spricht, sowohl beim Einlesen als auch beim Ausgeben. Sorge dafür, dass die Eingabedaten im SQL-Kontext keinen Schaden anrichten können, nutze z.B. mysqli und Prepared Statements oder halt eben altherkömmlich die mysql*_real_escape()-Funktionen.
Bei der Ausgabe der Daten in einem HTML-Kontext solltest Du die Daten aus der Datenbank mit htmlspecialchars() behandeln, eben dem Kontext angemessen :-)
Freundliche Grüße
Vinzenz