Sonderzeichen in PHP
AlGore2001
- php
1 David Aurelio0 Algore20010 dedlfix
Hallo,
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.
Eine Möglichkeit ist das Maskieren, eine andere die Funktion utf8_encode. Beides möchte ich vermeiden, wenn möglich.
Könnt ihr mir einen Tip geben?
Noch eine andere Frage: Gibt es einen Nachteil, wenn man als HTML Content-Type UTF8 verwendet und Umlaute nicht maskiert.
Danke
AlGore2001
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".
Hallo,
Danke für die hilfreiche Antwort.
Ich werde mal versuchen die Text auszulagern.
Danke
Algore2001
echo $begrüßung;
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".
Die Charset-Angabe sendet PHP nur, wenn unter default_charset ein Wert konfiguriert wurde. Default-Einstellung ist übrigens ein Leerstring.
echo "$verabschiedung $name";