RSS-Feed

Interne News

Zeichenkodierung – Problem behoben

| geschrieben von Dr. Sooom
Nach über 12 Stunden Arbeit habe ich das Problem mit der Zeichenkodierung beheben können. Eigentlich hätte das Problem bereits in weniger als 5 Minuten behoben sein können, aber was soll’s. 😉 Jetzt erstmal alles schön der Reihe nach.

Anmerkung: Die interne News Zeichenkodierung – wahrscheinliche Ursache sollte zusätzlich herangezogen werden.

Hintergrundinformationen:

Um das Problem genauer lokalisieren zu können, ging ich nun auf www.php.net und suchte dort nach den Begriffen "http-header", "header" und "charset". In Folge dessen konnte ich u.a. folgendes herausfinden:

Beschreibung der core php.ini Einstellungen

default_charset
Seit Version 4.0b4 gibt PHP standardmäßig immer eine Zeichen-Kodierung im "Content-type:"-Header aus. Um dies zu verhindern, lassen Sie diese Option leer.

Mein Provider dürfte hier den Wert "iso-8859-1" als Standardwert für PHP-Dateien festgelegt haben. Da ich nicht davon ausgehen kann, dass mein Provider diesen Wert auf "utf-8" umändert, musste ich eine Lösung finden, wie ich diesen HTTP-Header-Wert meinerseits umändern kann.

HTTP-Header vor der Problembehebung:

Vor der Problembehebung konnte ich über den HTTP-Header Analyser von der Firma sitepoint GmbH die folgenden Daten für http://www.danielmayr.at auslesen:

HTTP/1.1 200 OK
Date: Sun, 29 Jul 2007 21:33:07 GMT
Server: Apache/2.0.59 (NETWARE) PHP/5.2.3 mod_jk/1.2.15
Accept-Ranges: bytes
X-Powered-By: PHP/5.2.3
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

Hierbei sind die Werte der letzten Zeile, welche in Fettschrift ersichtlich ist, von hoher Bedeutung.

Die Lösung:

Wäre in "php.ini" kein Standardwert bei "default_charset" gesetzt worden, dann gäbe es dieses Problem überhaupt nicht, da ich vorher bereits den folgenden META-Tag gesetzt habe:


Da aber ein Standardwert gesetzt wurde, war die Wirkung dieses META-Tags gleich Null. Folglich begab ich mich wieder auf die Suche und wurde auch fündig. Der folgende PHP-Code war die Lösung allen Übels:


Dieser PHP-Code muss in der ersten Zeile stehen, ansonsten funktioniert es nicht.

Tja, so einfach könnte es gehen, wenn man weiß, wie’s geht. 😉 Weitere Informationen zu "function.header" im PHP-Code sind hier ersichtlich.

HTTP-Header nach der Problembehebung:

Der Vollständigkeit halber hier nochmals die HTTP-Header-Daten nach der Problembehebung:

HTTP/1.1 200 OK
Date: Fri, 03 Aug 2007 01:30:42 GMT
Server: Apache/2.0.59 (NETWARE) PHP/5.2.3 mod_jk/1.2.15
Accept-Ranges: bytes
X-Powered-By: PHP/5.2.3
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8

Nochmals vielen Dank für euer Verständnis und Dank an meinen Provider für die Unterstützung.