PHP-Skript für Content Negotiation

XHTML-Seiten sollen mit dem MIME-Type application/xhtml+xml und HTML-Seiten als text/html ausgeliefert werden. Ein gutes PHP-Skript, dass diese Aufgabe erledigt, gibt es auf keystonewebsites.com. Man kopiert sich das Code-Schnipsel in eine Datei und bindet diese dann ganz an den Anfang der Seite (vor <head>) ein. Abhängig vom User Agent liefert das Skript dann den richtigen Header aus. Für User Agents, die kein application/xhtml+xml können, wird der XHTML-Code HTML-kompatibel gemacht; aus <br />s werden dann z.B. <br>-Tags. Für den "Content-Type"-Teil in den Meta-Tags kann man auf die Variablen $mime und $charset zurückgreifen: <meta http-equiv="Content-Type" content="<?php echo $mime; ?>; charset=<?php echo $charset; ?>" />
Thursday, February 9. 2006
Defined tags for this entry:
148 hits

Comments

Display comments as (Linear | Threaded)

1

Garvin (Homepage) on 2006-02-09 17:12 (Reply)

Zwar fixt das Script Probleme ungeschlossener Tags, ABER:

1. Es behebt keine anderen XML Probleme. Ungültige Entities (das beliebte www.bla.de/?id=1&amp;nix=2) werden weiterhin ein Rendern der Seite unmöglich machen, da die XML-Engine der Browser meckert.

2. Es startet output-Buffering und durchsucht den gesamten Output nach fehlerhaftem XML ab. Das ist zum einen sehr performanceintensiv, und unterbindet zum anderen HTTP Chunked Encoding, da die gesamten HTML Daten erst nach vollständiger Abarbeitung der Seite gesendet werden.

Mein persönliche Fazit ist, solange xhtml+xml-Seiten immer noch so leicht zu einer vollständig undarstellbaren Webseite in Browsern führen, dies nicht zu nutzen. Zumindest bei dynamischen Webseiten, wo leicht mal ein Fehler einschlüpft. HTML ist immer sehr fehlertolerant gewesen, und der xhtml+xml Schritt macht diesen zentralen Aspekt derzeit noch zunichte.
2

alp on 2006-02-09 17:19 (Reply)

Ein einem CMS wäre ich auch vorsichtiger beim Einsatz eines solchen Skriptes; aber für statisches leichtes Zeugs hat es sich gut bewährt.
HTML ist immer sehr fehlertolerant gewesen, und der xhtml+xml Schritt macht diesen zentralen Aspekt derzeit noch zunichte.
Wem sagst du das ... ist das Teil erst mal drin, versteht der Validator nur noch HTML4. Dafür verweigert dir der xhtml+xml-kompatible User Agent jeden Dienst, wenn etwas nicht sauber gecoded ist.
3

Sascha Carlin (Homepage) on 2006-02-09 17:55 (Reply)

Bei aller Liebe, korrekter Code hilft so lange nicht, wie das Ergebnis nicht zufriedenstellend ist. Und so lange solche Verrenkungen nötig sein, um 100% sein zu wollen, bin ich lieber nur 80%.

Weißt schon, mit 20% 80% erreichen und so ;-)
4

molily on 2006-02-09 23:11 (Reply)

Was ich bei der Sache nicht verstehe: Scripte, die ein XHTML-Dokument wahlweise als text/html oder application/xhtml+xml ausliefern, gibt es schon länger. Das neue ist hier: Das Markup wird zu HTML 4 umgeformt. Warum überhaupt? XHTML 1.0 kann auch problemlos als text/html ausgeliefert werden. Das funktioniert in der Praxis aber faktisch genauso gut wie HTML 4.
Das Problem ist, man kann ein XHTML-Dokument nicht einfach in ein HTML-4-Dokument umwandeln, indem man das Dokument durchläuft und einfach /&gt; durch &gt; ersetzt. Ein HTML-Dokument mit xmlns="http://www.w3.org/1999/xhtml" und xml:lang="de" ist auch Unsinn. Daher verstehe ich gar nicht, wieso diese umständlige Lösung mit dem Output Buffer gewählt wird.
Was auch fehlt, ist der Hinweis, dass man gleichzeitig Styles und Scripte schreiben muss, die in beiden Modi funktionieren.
5

Marcus (Homepage) on 2006-02-10 15:15 (Reply)

Dazu kommt die Frage nach der Sinnhaftigkeit. Ja, application/xhtml+xml ist dann sinnvoll, wenn das XHTML-Dokument MathML ausliefern soll. Aber in einer Website, die auch noch wesentlich schneller gerendert wird, wenn sie einfach in text/html ausgeliefert wird (vgl. incremental display &amp; loading von XML-Dokumenten)? Und nur weil im Accept-Header application/xhtml+xml steht?

Ich verstehe auch nicht, weshalb das Script auf HTML 4 zurückfällt, zumal eine Weiche auf XHTML in text/html auch nicht die fix_code-Funktion ausführen müsste.
6

Marcus (Homepage) on 2006-02-10 15:17 (Reply)

Ach so, und den Validator würdde ich über den User-Agent abholen. Der W3C-Validator versteht nämlich application/xhtml+xml ;-)

Trackbacks


No Trackbacks

Add Comment

BBCode format allowed
Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
E-Mail addresses will not be displayed and will only be used for E-Mail notifications.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA


Über

Das hier ist das private Weblog von Alp Uçkan. Ich entwickle Websites seit 1997 und arbeite derzeit als freiberuflicher Frontend-Entwickler.

Specialp Features

fapulous Framework (neu!)
Das erste XHTML/CSS-Framework auf Basis der Faux Absolute Positioning-Technik. Beinhaltet viele performante Konstrukte. Der Stoff, aus dem professionelle Websites gemacht sind ... ;-)

monitorThis 1.0
With MonitorThis you can subscribe to 26 different search engine feeds at the same time.

Business Blogging Weeks
Blog-Serie über die Kommerzialisierung der Blog-Szene in 2005

neueste Leser-Kommentare:

06.02.2011 17:28
Lucky Number Slevin hat sowieso die besten Filmzitate! Hier noch ein paar sehr Gu [...]
21.01.2011 13:26
Ok, I will do this in the next few days, probably two weeks. I have to do some three [...]
21.01.2011 12:52
Dear Mr Binder, a free german translation of this tutorial would be highly apprec [...]