PHP/MySQL - Header - Charset
1. Die Abschnitte
- Erläuterung
- "Cannot modify ..."
- Pufferung
- Kleine Beispiele
- Internet Media Type
- Dateien
- Downloads
- Charset
- HTTP-Header
2. Ein Hinweis
Da die Geschichte mit der Zeichenkodierung ein wenig kompliziert ist, habe ich dazu ein ausführliches Tutorial verfasst, wo ich auf die wichtigsten Dinge eingehe. Das solltet ihr euch auf jeden Fall zur Brust nehmen. Und darum sollte man hier besonders(!) auf die Angaben zum Zeichensatz achten.
Bei allen Formaten
... wird als Standardkodierung US-ASCII genommen. Und genau so wie deren entfernte Verwandte gleicher Zunge in Großbritannien kennen die keine Sonderzeichen wie zum Beispiel das Deutsche oder das Französische.
3. Der Code
... ist ziemlich pisselig, enthält aber zwei Wörter mit deutschen Umlauten. Dabei habe ich die ersten beiden genommen, die mir einfielen.
Aber bitte deswegen keine Rückschlüsse auf meine Psyche ziehen. Die Datei dazu findet ihr im Ordner charset
und nennt
sich iso.php
.
<?php
header('Content-Type: text/xml');
echo '<info>
<bla>Überzeugung</bla>
<blubb>Triebtäter</blubb>
</info>';
?>
Wenn ihr die jetzt im Browser aufruft (bitte noch nicht hineinschauen!), so seht ihr anstelle der Umlaute nur eine
Fehlermeldung. Wie ich eingangs schon sagte, liegt das an der Standard-Kodierung von XML-Formaten. Deshalb gibt man nun das gültige
ISO-8859-1 an. Die Angabe selber erfolgt direkt im
Content-Type
:
<?php
header('Content-Type: text/xml; charset=ISO-8859-1');
...
?>
So, jetzt dürft ihr euch die Datei im Editor anschauen und entsprechend anpassen. Und anschließend natürlich auch testen.
4. UTF-8
Hier ist die Sache noch ein wenig komplizierter. Denn es muss nicht nur der korrekte Charset angegeben werden, nein, selbst die verarbeitende
Datei muss als UTF-8 abgespeichert sein. Ruft dazu mal die Datei
utf-8.php
im schon erwähnten Ordner charset
mit eurem Browser auf. Dort haut es euch dann wieder eine
Fehlermeldung um die Ohren. Und warum? Der Code scheint doch in Ordnung zu sein.
<?php
header('Content-Type: text/xml; charset=UTF-8');
echo '<info>
<bla>Überzeugung</bla>
<blubb>Triebtäter</blubb>
</info>';
?>
Nun der Code selber ist einwandfrei, aber das Format der PHP-Datei nicht! Die wurde nämlich als ANSI abgespeichert. Also öffnet sie mal im Editor eurer Wahl und wandelt sie in UTF-8 um. Dabei dürft ihr aber nicht das schon erwähnte BOM-Problem vergessen! Wenn ihr sie anschließend noch mal im Browser aufruft, ist alles wieder feini, feini. Es sei denn ihr habt Mist gemacht.
Exotenschriften
Dieses Problem könnt ihr wunderbar an der Datei utf-8_ru.php
erkennen. Öffnet sie mal mit eurem Editor und ihr seht dort
kyrillische Schriftzeichen. Es sei denn der Editor ist totaler Müll oder falsch eingestellt. Wenn jetzt von euch jemand auf die Idee
kommt, diese Datei in ANSI zu konvertieren, so sieht das Ergebnis dann so aus:
<?php
header('Content-Type: text/xml; charset=UTF-8');
echo '<info>
<bla>???????? ?????</bla>
<blubb>??????? ? ???????????</blubb>
</info>';
?>
Und leider kann man das auch nicht mehr rückgängig machen. Darum Obacht bei UFT-8-Kodierungen und -Dateien! Verstanden?
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt