David Aurelio: Sonderzeichen in PHP

Beitrag lesen

folgendes Problem:
Umlaute, die im PHP-Skript eingebe, werden auf der Seite als "?" dargestellt. Der HTML Content-Type ist UTF-8. Umlaute aus der Datenbank werden korrekt dargestellt.

Das deutet darauf hin, dass der Inhalt Deiner Datenbank UTF-8-codiert ist.
Deine PHP-Skripte sind in irgendeiner Zeichencodierung gespeichert. Das hängt von Deinem Editor ab. PHP geht davon aus, dass Dein Skript in ISO-8859-1 gespeichert ist.

Eine Möglichkeit ist das Maskieren, eine andere die Funktion utf8_encode. Beides möchte ich vermeiden, wenn möglich.

Warum möchtest Du utf8_encode vermeiden?

Könnt ihr mir einen Tip geben?

Speichere Deine PHP-Skripte als UTF-8. Das funktioniert. Allerdings haben solche Strings meiner Meinung nach in der Programmlogik nichts verloren. Du könntest z.B. für Fehlermeldungen eine INI-Datei anlegen, diese als UTF-8 speichern, per parse_ini_file auslesen und entsprechend ausgeben.
Eine andere Möglichkeit ist eine templatebasierte Ausgabe. Ich verwende zur Zeit seh gerne phpsavant, weil es keine eigene Templatesprache, sondern nur PHP verwendet und dadurch sehr einfach zu verwenden ist.

Noch eine andere Frage: Gibt es einen Nachteil, wenn man als HTML Content-Type UTF8 verwendet und Umlaute nicht maskiert.

Nein?

Was mir noch einfällt: sendest Du eigentlich den entsprechenden Header?
header("Content-type: text/html;charset=UTF-8"); PHP sendet nämlich sonst grundsätzlich "Content-type: text/html;charset=ISO-8859-1".