Fachartikel
XHTML richtig ausliefern
Inhalt
Dieser Artikel befasst sich mit dem richtigen Senden von XHTML-Dokumenten via PHP (oder einer anderen Skriptsprache). Zur Unterscheidung, ob HTML oder XHTML verwendet werden sollte, nur kurz etwas. XHTML kann mittels eines XML-Parsers (schnell) vom Client verarbeitet werden und ist besser zur Trennung von Inhalt und Layout, daher sei hier XHTML wärmstens empfohlen.
Der MIME-Type
Um Inhalte im World Wide Web auszuliefern wird der sogenannte MIME-Type (Multipurpose Internet Mail Extensions) verwendet. Er wird mit den Header-Daten geschickt, sodass der Client die gesendeten Daten richtig verarbeiten kann. In den Anfängen des Webs wurde der Inhalt alleine über die Dateiendung interpretiert. Dies ist natürlich weder sinnvoll noch praktisch, gerade in Bezug auf eigens definierte Formate. Der MIME-Type für normales HTML ist "text/html", für XHTML ist er "application/xhtml+xml".
Content-Negotiation
Ein Webbrowser schickt bei jeder Anfrage an einen Server eine Reihe von Headerdaten mit, um dem Server mitzuteilen, welche MIME-Typen er versteht, welche Codierung er unterstützt oder auch seine eigene Identifikation (bspw. IE/Firefox/...). Wir wollen uns jedoch anschauen, welche MIME-Types er unterstützt. Im Accept-Headerfeld des vom Browser geschickten Requests stehen nun die MIME-Types, natürlich auch text/html. Wir erhoffen uns natürlich, dass der Browser auch application/xhtml+xml angibt, sodass wir unser XHTML-Dokument auch wirklich als solches ausliefern können. Nun stellt sich die Frage, wie man unterscheidet und richtig ausliefert. Denn ein <meta>-Tag im head-Teil des Dokuments bringt nicht den gewünschten Effekt, denn dann wird immer noch der langsame Parser verwendet und nicht der schneller XML-Parser.
Header senden
Deshalb müssen wir dem Client bereits im Header mitteilen, dass es sich um XHTML handelt. Wir fragen also den Accept-Header des Clients ab und bei gefundenem application/xhtml+xml senden wir den XHTML-Header, anderenfalls nur einen normalen HTML-Header. In PHP könnte dies bspw. so
aussehen:
if(strpos($_SERVER['HTTP_ACCEPT'],"application/xhtml+xml")) {
$doctype="xhtml1.1";
header("Content-Type: application/xhtml+xml; charset=ISO-8859-1");
echo('<?xml version="1.0" encoding="ISO-8859-1" ?>');echo("\n");
echo("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n");
} else {
$doctype="xhtml1.0";
header("Content-Type: text/html; charset=ISO-8859-1");
echo("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n");
}
Anschließend kann dann noch im head-Tag ein Vermerk entsprechend des Content-Types gemacht werden.
Kontakt - Impressum - Datenschutz
Alle Grafiken, Bilder, Texte und Dokumente sind urheberrechtlich geschützt und dürfen nicht ohne schriftliche Genehmigung verwendet werden. Copyright © 1998-2008 by Martin Walter.
Alle Rechte vorbehalten. all rights reserved.