dedlfix: Umlaute in Datenbank schreiben

Beitrag lesen

echo $begrüßung;

Habe leider nach vielem Suchen nicht das richtige gefunden...bzw. ich verstehe es nicht richtig!

Wenn du konkret werden würdest, könnte man versuchen, das Verständnisproblem direkt zu lösen.

Habe eine HTML-Formular erstellt, das daten vom benutzer einliest. diese werden dann mit php in die mysqldatenbank eingespielt. leider funktioniert das nicht richtig...umlaute werden nicht richtig angezeigt (in der datenbank).

Aus der Art der "Nicht-Richtigkeit" kann ein geübtes Auge oft erkennen, was konkret schiefläuft. Bitte beobachte und beschreibe genauer, wenn man dir gezielter helfen soll.

wenn ich die umlaute manuell in die datenbank eingebe, dann werden die daten richtig weiterverarbeitet

Was bedeutet "manuell"?

(die datenbank hab ich auf utf8 gestellt genauso wie ein htmlcode) und ich verwende noch htmlentities() da sonst doch nicht alles richtig angezeigt worden wäre.
also muss das problem beim einschreiben in die datenbank liegen...geht da schon was beim post schief? oder ist es wirklich das einschreiben? wie kann ich die umlaute korrekt in die datenbank bekommen?

Grundsätzlich muss jeder Beteiligte am Gesamtprozess a) mit der gewählten Zeichenkodierung umgehen können und b) über die zu verwendende Zeichenkodierung informiert werden.
Beteiligte sind der Browser, PHP und MySQL. PHP ist im Prinzip (noch) nicht fähig, mit UTF-8 umzugehen, sieht man mal von der nicht zum Default gehörenden Multibyte-String-Extension ab. Das ist jedoch egal, solange du die Daten nur durchreichst und keine Stringverarbeitung (z.B. Zeichen zählen, String trennen) benötigst. Browser sind im Allgemeinen Unicode- und UTF-8-fähig. MySQL ist es seit Version 4.1. Für die Datenspeicherung ist allein die Kodierungsangabe der einzelnen Felder interessant. Datenbank- und Tabellen-Kodierungsangaben sind nur Defaultwerte für neu anzulegende Tabellen und Felder, wenn dabei keine explizite Angabe gemacht wird.

Für Punkt b) ist es wichtig, die Stellen zu kennen, an denen die Kodierung für den jeweiligen Empfänger bekanntgegeben wird, und natürlich auch, dass dann diese Kodierung verwendet wird. Jeder Client eines MySQL-Servers tut gut daran, sich die zu verwendende Kodierung explizit für jede Verbindung (sprich: direkt nach dem Verbindungsaufbau) auszuhandeln, sonst wird irgendein Default-Wert verwendet. mysql(i)_set_charset() oder als Alternative ein SET NAMES-Statement sind dafür angebracht. Der Browser bekommt die Angabe über die charset-Angabe im HTTP-Header Content-Type oder, wenn der fehlt, über die gleichlautende HTML-Meta-Angabe. Bei HTML-Formularen sollte man das accept-charset-Attribut angeben, dem der Browser entnehmen soll, welche Kodierung er zum Senden der Daten zum Server verwenden soll.

Grundsätzlich solltest du bei Unklarheiten, auch solchen mit der Zeichenkodierung, jeden Schritt einzeln prüfen, Kontrollausgaben machen und die Zwischenergebnisse kontrollieren und zu verstehen versuchen. Bei Zeichenkodierungsproblemen kann eine Anzeige der Hex-Werte der Datenbytes hilfreich sein.

echo "$verabschiedung $name";