Ist die Seite in UTF-8 kodiert? 06. January 2007 um 15:40 Uhr / Programming

Eingestellt am 06. January 2007 um 15:40 Uhr » Programming

Ich musste jetzt einiges an Zeit investieren um herauszufinden was ich so alles beachten muss um zu Schauen ob eine Seite UTF-8 kodiert ist oder nicht. Erst mal das Ergebnis im PHP-Code:

if(! $utf8 = preg_match ('/charset\s*=\s*utf-8/i', $content_type))
  $utf8 = 'application/xhtml+xml' == strtolower(trim($content_type));

Und nun die Erklärung dazu. $utf8 ist dann entweder true oder false. In $content_type befindet sich der Content-Type aus dem Header (z.B.: Content-Type: text/html; charset=ISO-8859-15).

Eigentlich sollte im HTTP-Header grundsätzlich immer das Charset angegeben werden. Wenn er allerdings nicht angegeben wurde, ist es per Default ISO-8859-1 so lange es sich um eine HTML-Seite handelt. Ist es allerdings eine XHTML-Seite dann ist als Default UTF-8 angegeben. Hinzu kommt dass XHTML-Seiten, die als text/html ausgeliefert werden keine echten XHTML-Seiten sind uns so behandelt werden wie HTML-Seiten, also ist ihr Default-Charset ISO-8859-1.

Der Hintergrund dabei ist der, dass ich bei Jlog gerade einen Bug ausbügeln wollte, der bei Pingback falsche Zeichen ausgab wenn die andere Seite UTF-8 kodiert wurde. Jetzt ist da noch zusätzlich so etwas drin:

$title = $utf8 ? utf8_decode($title) : $title;


Kommentare

Die Kommentare sind für diesen Eintrag geschlossen.