XHTML und PHP
-
Hallo Leute
Normalerweise benutzen die Browser ja den XHTML - Parser nur, wenn die Endung der ensprechenden Datei = *.xhtml ist. Eine *.php Seite wird ohne entsprechenden Massnamen einfach mit dem HTML - Parser abgearbeitet. Meine Frage ist nun, wie ich erreichen kann, dass der Browser eine *.php Seite mit dem XHTML - Parser parst. Vermutlich muss ich ein entsprechendes header setzen? Aber wie sieht dieses genau aus?Vielen Dank und liebe Grüsse
-
Soweit ich informiert bin, haengt das nicht mit der Dateiendung zusammen, sondern mit dem MIME-Typ, den der Webserver aussendet (darauf hast du keinen Einfluss, wenn der Webserver nicht dir selber gehoert) und dem HTML-Doctype.
XHTML-Doctype ist z. B:
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
HTML 4.01:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>
ABER soweit ich informiert bin, ists weniger wichtig (bzw. kann mir vorstellen dass da nichtmal unterschieden wird!), ob du jetzt HTML oder XHTML schreibst, sondern ob es gueltig (standardkonform) ist oder in den Quirks-Mode umgeschaltet werden muss.
-
Das Problem ist aber, dass ich weiss, dass der Browser nicht den XHTML - Parser benutzt, weil dieser keine Synthaxfehler zulässt! Wenn ich zB. <div schreibe anstatt <div> dann zeigt der XHTML - Parser einen Parseerror an, der HTML - Parser ignoriert es allerdings. Wenn ich nun die Seite *.php nenne. Kommt ein Parseerror, wenn ich die Seite allerdings *.xhtml nenne, kommt ein Parseerror.
-
Das hat mit der Endung nichts zu tun. Du kannst sogar gar keine Endung haben. Das ist nur eine dumme Request-URI, die der Server interpretieren kann wie er will, unter anderem kann er eine solche Datei suchen und den Inhalt als Antwort senden. Das muss aber schon gar nicht so sein.
Wichtig ist die Angabe des Doctypes. Und wenn dein Dokument nicht 100%ig standardkonform ist, kann es dir passieren, dass der Browser in den Quirks-Mode schaltet und manche Sache ganz anders interpretiert.
Blue-Tiger hat praktisch alles gesagt.
-
Ok, ist dieser Doctype falsch?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">Wieso ist es dann so, dass wenn ich eine Datei mit der Endung *.xhtml lokal anlege und sie mit einem Browser (ohne Server und nichts) ganz einfach öffne, sie mit dem XHTML - Parser abgearbeitet wird. Mit allen anderen Endungen aber nicht?
-
Neuere, XML-fähige Browser (Internet Explorer ab Version 5.x, Netscape ab Version 6.x) behandeln Dateien je nach Systemkonfiguration abhängig von der Dateinamenerweiterung unterschiedlich, wenn sie sonst keine Hinweise (Mime-Type) darauf haben, wie die Datei zu behandeln ist. Wenn Sie in einer Datei zwar alle Regeln von XHTML einhalten, die Datei aber mit den typischen Endungen .htm oder .html abspeichern, benutzen diese Browser ihre HTML-Parser. Speichern Sie die Datei dagegen mit einer anderen Endung ab, z.B. .xhtml, dann benutzen die Browser unter Umständen ihre XML-Parser. Der Unterschied macht sich vor allem dann bemerkbar, wenn das Dokument syntaktische Fehler enthält. Die heute üblichen HTML-Parser der Browser lassen syntaktische Fehler im Dokument einfach durchgehen und versuchen das Dokument "irgendwie" anzuzeigen. XML-Parser brechen dagegen mit einer Fehlermeldung ab, sobald sie auf einen syntaktischen Fehler stoßen. Im Anzeigefenster des Browsers erscheint dann nur eine Fehlermeldung anstelle des Dokuments.
Die Dateiendung spielt also keine Rolle was???
-
Ishildur schrieb:
Die Dateiendung spielt also keine Rolle was???
wenn sie sonst keine Hinweise (Mime-Type) darauf haben, wie die Datei zu behandeln ist
PS:
Namen sind im Web Schall und Rauch. Und jeder Browser fällt in den Quirks Mode, wenn der Compliant Mode (Strict Mode, oder wie auch immer) einen Syntax Fehler meldet.
-
@Shade of Mine
Ja, das ist mir schon klar, allerdings habe ich ja in meinem ersten Post gefragt, ob ich denn ein header senden müsse und wie dieses dann aussehen würde.Das der Browser automatisch in den Quirks Mode wechselt, wenn der Compilant Mode einen Syntaxfehler entdeckt, fällt mir sehr schwer zu glauben. Dies Passiert doch nur, wenn der Browser den HTML - Parser benutzt, nicht jedoch mit dem XHTML - Parser! Der bringt einen Parsererror.
Solange Sie also XHTML-konforme Dateien mit den HTML-typischen Endungen .htm oder .html abspeichern, erreichen Sie eine "normale" Darstellung im Browser, verhindern aber auch, dass die Dateien im Browser auf XML-Basis verarbeitet werden. Speichern Sie die Dateien dagegen unter einer anderen, dem Browser unbekannten oder mit dem Mime-Type text/xml verknüpften Dateiendung ab, dann werden die Dateien zwar auf XML-Basis verarbeitet, doch dann dürfen die Dateien tatsächlich keine syntaktischen Fehler enthalten, und wenn im Anzeigefenster des Internet Explorers etwas anderes als ein Strukturbaum erscheinen soll, müssen Sie Stylesheets verwenden, um die Elemente zu formatieren.
Nun, wenn er also tatsächlich beim geringsten Fehler sofort in den Quirksmodus wechselt, woher kann ich dann wissen, dass ich einen Synthaxfehler gemacht habe?
P.S.
Ich hoffe ihr missversteht mich nicht als "Besserwisser". Im Gegenteil, ich verstehe es ja eben nicht!!Liebe Grüsse Ishildur
-
Die Dateiendung spielt also keine Rolle was???
Oh man. Lies halt wenigstens den Text selber, den du zitierst. Wenn du ein anständiges Dokument schreibst, steht im Response-Header der MIME-Type und im Dokument der Doctype.
Das der Browser automatisch in den Quirks Mode wechselt, wenn der Compilant Mode einen Syntaxfehler entdeckt, fällt mir sehr schwer zu glauben.
Ich habe nicht gesagt, dass es zwangsläufig so ist. Wenn er ein ungültiges Attribut entdeckt kann der Browser entscheiden, ob er so weiter macht oder ob er in den Quirks wechselt. Also was glaubst du jetzt nicht? Irgendwie habe ich das Gefühl, du glaubst nicht allzu viel, aber warum fragst du dann?
[...] woher kann ich dann wissen, dass ich einen Synthaxfehler gemacht habe?
Damit:
http://validator.w3.org/check?uri=referer
http://jigsaw.w3.org/css-validator/check/referer
-
Ishildur schrieb:
Ja, das ist mir schon klar, allerdings habe ich ja in meinem ersten Post gefragt, ob ich denn ein header senden müsse und wie dieses dann aussehen würde.
Wurde schon genannt: der MIME Typ ist ausschlaggebend. Und nein, du musst keinen Header senden, sondern nur den MIME Typ setzen. Wie du das tust, ist deine Sache.
Ein HTTP Header ist da zB ganz praktisch. Aber da ja eine Webseite auch mal Offline gelesen werden kann, ist ein zusätzlicher META Tag sicher nicht verkehrt.
Warum man dennoch lieber nicht den richtigen MIME Typ setzen sollte, wenn man XHTML verwendet, sei dem geneigten Leser zur Übung überlassen
Das der Browser automatisch in den Quirks Mode wechselt, wenn der Compilant Mode einen Syntaxfehler entdeckt, fällt mir sehr schwer zu glauben. Dies Passiert doch nur, wenn der Browser den HTML - Parser benutzt, nicht jedoch mit dem XHTML - Parser! Der bringt einen Parsererror.
Ja, klar. Hast du schonmal einen Browser gesehen der sagt: Sorry, die Seite kannst du dir nicht ansehen, da hat jemand <br> groß geschrieben und ich bin jetzt zu verwirrt weiter zu machen...
Nein, das wäre ja ein Horror für den User. Und ein Browser soll ja für den User arbeitet, nicht gegen ihn. Es mag natürlich Browser geben, denen man sagen kann "Bitte melde mir alle Parserfehler" aber einem 08/15 User will sicher kein Browserhersteller mit XML Parsing Fehlern verwirren.
Solange Sie also XHTML-konforme Dateien mit den HTML-typischen Endungen .htm oder .html abspeichern, erreichen Sie eine "normale" Darstellung im Browser, verhindern aber auch, dass die Dateien im Browser auf XML-Basis verarbeitet werden. Speichern Sie die Dateien dagegen unter einer anderen, dem Browser unbekannten oder mit dem Mime-Type text/xml verknüpften Dateiendung ab, dann werden die Dateien zwar auf XML-Basis verarbeitet, doch dann dürfen die Dateien tatsächlich keine syntaktischen Fehler enthalten, und wenn im Anzeigefenster des Internet Explorers etwas anderes als ein Strukturbaum erscheinen soll, müssen Sie Stylesheets verwenden, um die Elemente zu formatieren.
Ja, dann hast du XML - das können aber die meisten Browser wiederum garnicht. Und du willst nicht ernsthaft XML senden, oder? Wozu gibt es denn XHTML/HTML? Damit du eben nicht das Rad neu erfinden musst (mal davon abgesehen, dass die meisten Browser mit reinem XML sowieso nicht klarkommen, was auch klar ist: wozu denn auch?)
XHTML ist eine XML Form, richtig. Aber dennoch ist XML etwas anderes als XHTML.
Nun, wenn er also tatsächlich beim geringsten Fehler sofort in den Quirksmodus wechselt, woher kann ich dann wissen, dass ich einen Synthaxfehler gemacht habe?
Beim geringsten Fehler vielleicht nicht, aber bei einem Fehler den der Parser als schwer erachtet, schaltet er in den Quirksmode um die Seite wenigstens irgendwie darzustellen. Schließlich ist eine häßliche Seite besser als garkeine, oder?
Denn wenn der Browser die Seite nicht darstellen kann, dann ist der User nicht auf die Webseite sauer, sondern auf den Browser. Die Hersteller werden ein "Seite nicht darstellbar" also um jeden Preis zu verhindern zu versuchen...
-
<?php header("Content-type: application/xhtml+xml"); ?>