dedlfix: Sonderzeichen in externen Dateien

Beitrag lesen

echo $begrüßung;

Es gilt nun erst einmal herauszufinden, in welcher Kodierung das Dokument vorliegt. Das könnte beispielsweise ISO-8859-1 oder UTF-8 oder ... sein.

Ich habe z.Zt. zu Testzwecken gar keine Kodierung angegeben. Die Angabe einer Kodierung ändert aber auch nichts an der Darstellung im Browser, [...]

Einfach irgendwas anzugeben ist nicht die Lösung. Davon springen die Bytes des Textes auch nicht um.
Gehe davon aus, dass es nicht möglich ist, aus einer Folge von Bytes herauszulesen, wie diese richtig zu interpretieren sind.[*]
Deine Daten liegen in einer bestimmten Kodierung vor. Genau diese musst du angeben, damit der Empfänger die Bytefolge der Daten gemäß dieser Kodierung dekodieren kann.

Ich habe die entsprechende Datei mit einem Texteditor (UltraEdit) erstellt - möglicherweise ist das Format UTF-8. Wie kann ich das überprüfen?

Durch Anschauen mit einem Nicht-Unicode-fähigen Editor. Dazu musst du aber wissen, wie so ein UTF-8 kodierter Text (im Speziellen die "unamerikanischen" Zeichen) aussieht, wenn du ihn mit der Standard-Kodierung deines Windows (ISO-8859-1-kompatibel) ansiehst, um ihn als solchen zu erkennen. Oder du öffnest, wie ich bereits sagte, die Datei im Browser und probierst es mit der dort vorhandenen händisch einstellbaren Kodierungsangabe.

Vielleicht hängt das Phänomen mit den unzureichenden Unicode-Fähigkeiten von PHP zusammen?!

Nein. Unicode-Fähigkeiten brauchst du nur, wenn du mit den Strings arbeiten möchtest. Zum Beispiel darf beim Zählen der Zeichen eines UTF8-Strings nicht einfach nur die Anzahl der Bytes herangezogen werden.
Wenn es um das schlichte Durchreichen per include (oder mit readfile(), was mir in dem Fall besser geeignet scheint) geht, dann brauchts keine Unicode-Fähigkeiten.

Ich vermute, dass du den einzubindenden Text (vielleicht durch Unachtsamkeit beim Speichern) nun in UTF-8-Kodierung vorliegen hast und dass die Seite, in die er eingebunden werden soll, in ISO-8859-1 vorliegt. Für der Fall gibt es keine korrekte Kodierungsangabe. Einer der beiden Teile ist dann immer falsch. Dann hilft beispielsweise, den Text nochmal in ISO-8859-1 (der Ultraedit sagt ASCII dazu) abzuspeichern (wird das beste sein), oder wie folgt mit PHP-Mitteln zu flickschustern: Einlesen des Textes in einen String z.B. mit file_get_contents(), Umwandeln nach ISO-8859-1 mit utf8_decode(), Ausgabe mit echo, Charset-Angabe in HTTP- und HTML-Header auf ISO-8859-1 stellen.

echo "$verabschiedung $name";

[*] Man kann zwar Rätselraten, doch kann die interpretierende Software das Ergebnis des Rateversuchs nicht mit der wirklichen Lösung vergleichen kann.