echo $begrüßung;
Beachte bitte, dass bei der Verarbeitung von Daten jeglicher Art
a) jedes System einzeln und
b) jede Kommunikation zwischen zwei Systemen
getrennt zu betrachten ist. Bei Textdaten ist es wichtig, die Systeme und die Schnittstellen zwischen ihnen im Hinblick auf Zeichenkodierungen zu betrachten. Wie geht das System mit Daten in bestimmten Kodierungen um? Welche Kodierung ist auf der Schnittstelle zu verwenden? Müssen Konvertierungen stattfinden? Muss die Kodierung zwischen zwei Systemen ausgehandelt oder deklariert werden, und wenn ja, wie muss das erfolgen?
Umkodierungen sind am besten zu vermeiden, weil nicht in jede Richtung verlustfrei umkodiert werden kann.
Ich habe hier ein kleines Script für das Spiel World of Warcraft.
Es liest die Daten die ich brauche aus einer XML Datei aus.
Die meisten XML-verarbeitenden Systeme und Programmteile liefern die Daten in UTF-8. Mitunter selbst dann, wenn sie in der Datei in einer anderen Kodierung drinstehen und korrekt ausgezeichnet sind.
Soweit mag dies ja alles richtig sein.
So wenn ich nun die Seite aufrufe und vorher die Variable $name mit nem echo versehen habe sind alle Umlaute richtig.
Da geht es schon los. System A gibt die Daten an System B zur Ausgabe. Um ein "richtig" zu bestätigen, reicht nicht nur der Augenschein, denn trotz richtiger Anzeige können in der Verarbeitungskette Fehler sein, die sich erst unter bestimmten Umständen zeigen (nicht-alltägliche Zeichen, die man nicht berücksichtigt hat). Kannst du die obigen Fragen beantworten und dein "richtig" auch als hinter den Kulissen richtig bestätigen?
So wenn ich diese nun in eine Datenbank schreibe sind alle umlaute falsch.
Die nächste Schnittstelle. Eigentlich sind es zwei, denn du schaust ja nicht direkt in die Datenbank sondern verwendest wieder ein System mit einer Schnittstelle zwischen ihm und dem DBMS. Wenn das Betrachtungsprogramm phpMyAdmin ist, dann hat das seine Hausaufgaben bezüglich der obigen Fragen gemacht. Nur kann es nichts dafür, wenn jemand anderes Fehler in seiner Verarbeitungskette hat.
Wenn ich die Daten mit PHP wieder aufrufe sind die Daten aber richtig.
Also Umlaute und alles ist richtig-
Mitunter kehrt sich ein Fehler auf dem Rückweg wieder um. Vermutlich auch hier.
Angenommen, du sendest UTF-8-Daten, deklarierst sie aber nicht korrekt, so dass sie aufgrund der Defaulteinstellung als Latin1 angesehen werden, so bekommst du sie zwar auch wieder als Latin1 zurück, interpretierst sie jedoch als UTF-8. Soweit so gut, denn bei diesem Vorgang trat kein Verlust auf. Aber innerhalb des DBMS liegen sie falsch deklariert rum, so dass jemand mit richtiger ausgehandelter Schnittstellenkodierung sie zwar gemäß dieser Aushandlung korrekt kodiert bekommt, sie aber nicht richtig weiterverarbeiten kann, weil sie von vorn herein nur falsch abgelegt werden konnten.
Wie mache ich es das in der DB auch die Umlaute drinnen sind?
Beantworte dir die obigen Fragen für all deine Systeme und Schnittstellen. Wenn sich dabei neue stellen, versuche sie mit der Systemdokumentation zu klären oder befrage eine Suchmaschine und/oder das Archiv (oder stell sie hier).
echo "$verabschiedung $name";