Ist die Seite in UTF-8 kodiert? 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.
Götz aus Karlsruhe / Schmiden schrieb am 06.01.2007
Danke für den Schnipsel, auch wenn die Eigenleistung eher gering war ;) - kann mir gut vorstellen, daß ich das auch mal für irgendwas brauchen können könnte.
macx aus Hannover schrieb am 06.01.2007
Grundsätzlich kannst du nicht sagen, wie eine Webseite ausgeliefert wird. Auf Apache-Webserver bestimmt zunächst per Default httpd.conf, welcher Zeichensatz ausgeliefert wird. Auch eine .htaccess kann Einfluss auf die Auslieferung nehmen.
Jeena Paradies aus Varberg schrieb am 06.01.2007
Na es ist doch völlig egal wer da was ausgibt, es geht ja um das was ankommt. Und ankommen tut eben entweder was im HTTP-Header oder nicht.
Rodney Rehm aus Radolfzell am Bodensee schrieb am 06.01.2007
Richard aus Karlsburg schrieb am 07.01.2007
Danke! Genau das habe ich gesucht.
Wilhelm Turtschan schrieb am 11.01.2007
Irgendwie mag ich utf-8 nicht.
Aber das schreibe ich ja nur, damit ich das komische Bildchen sehe
Rolf aus Karlsruhe schrieb am 15.01.2007
hab beim Einbinden von HeiseOnline RSS-Feed auf meine WebSite vor der Alternative gestanden, den Feed mit PERL von utf-8 nach ISO-8859-1 zu konvertieren oder als utf-8 auszugeben.
Letzteres war einfacher:
<meta http-equiv="content-type" content="text/html; charset=utf-8">
--roro
Tim schrieb am 05.03.2007
Rodney: Wenn der UTF-8-String ein BOM enthält, kann man schon relativ sicher das UTF-8 erkennen. Näheres dazu in Anhang F der XML Spezifikation