Datenschutzerklärung

Was soll hier falsch sein?

Validome - Forum

Startseite Validome
RSS 2.0  
Sie sind nicht angemeldet. Atom 1.0  
Forum Home / HTML und XHTML-Forum /

Was soll hier falsch sein?

  Beitrag schreiben
Autor
Beitrag Seiten: 1
Daniel
Gast



nAbend

Es geht um die fehlermeldung vom w3c, hier bei validome ist alles valide xhtml 1.0 strict.


Und zwar hab ich das gleiche script bei verschiedenen providern getestet, darunter ist einer bei dem der w3c den doctype nicht erkennt!!!

Da ist auch eine fehlermeldung über 10 zeilen verteilt die sich darauf bezieht:

if(stristr($_SERVER['HTTP_ACCEPT'],"application/xhtml+xml")) {header("content-type: application/xhtml+xml; charset=ISO-8859-1");}
else {header("content-type: text/html; charset=ISO-8859-1");}


Die meldung lautet:

1:
No XML declaration (e.g <?xml version="1.0"?>) could be found at the beginning of the document.
...die hab ich auch noch nie eingesetzt da ich sie ja per header versende

2:
Undefined index:  HTTP_ACCEPT in <b>/kunden/65256_90230/webseiten/inc/header.php on line 7
...und diese zeile 7 ist die if-abfrage die ich oben gepostet habe.

Weiß jemand bescheid, warum das auf einer domain super geht und auf der anderen nichtmal ein doctype erkannt wird?


16.11.2007 19:07:07
  Zitieren
HTMELL
Administrator

Registriert: 11.05.2006
Beiträge: 544
Hi,

...die hab ich auch noch nie eingesetzt da ich sie ja per header versende
Das hast Du nicht. Im Header sendest Du den Content-Type, keine XML-Deklaration (das geht überhaupt nicht).
Die XML-Deklaration gehört an den Anfang des Dokumentes -->http://www.validome.org/doc/HTML_ge/html/xhtml/unterschiede.htm#xml_deklaration
Die PHP-Fehlermeldung deutet darauf hin das einige Provider den Header "HTTP_ACCEPT" (welcher vom Browser versendet wird) nicht "durchläßt". Am besten Du fragst erst einmal ab ob dieser vorhanden ist:

Code:

if(array_key_exists('HTTP_ACCEPT', $_SERVER) && stristr($_SERVER['HTTP_ACCEPT'],"application/xhtml+xml")) {
  header("content-type: application/xhtml+xml; charset=ISO-8859-1");
}
else {
  header("content-type: text/html; charset=ISO-8859-1");
}


...und auf der anderen nichtmal ein doctype erkannt wird

Einen Doctype sehe ich weit und breit nicht.


_______________________________________
mfg
Thomas Mell

www.validome.org

16.11.2007 23:45:21
  Zitieren
Gurkenpapst
Mitglied

Registriert: 03.10.2007
Beiträge: 31
Noch ein Hinweis: Deine Content-Negotiation ist fehlerhaft, da sie beispielweise bei einem

Accept: text/html, application/xhtml+xml;q=0, */*;q=0.2

application/xhtml+xml liefert, obwohl der UA das ausdrücklich ablehnt. Für Testzwecke ist dieser MIME-Typ sicherlich wegen seiner strengen Fehlerbehandlung sinnvoll, im Praxiseinsatz macht er jedoch bislang nur unnötig Probleme (fehlerhaftes Speichern von Webseiten - insbesondere bei anderen Zeichenkodierungen als UTF-8, keine progressive Anzeige, Fehlerkennung durch solche Routinen wie von dir verwendet, ...) und bringt keine Vorteile. Siehe auch http://schneegans.de/web/xhtml/#content-negotiation

Das dort ebenfalls angesprochene Problem mit dem Caching wird durch deinen Code ebenfalls ignoriert. Eine korrekt funktionierende Lösung in PHP finde ich im Moment nicht. http://keystonewebsites.com/articles/mime_type.php kommt zwar schon recht nah heran, aber auch dort sind Fehler enthalten. So wird z. B. auch über HTTP/1.0 Content Negotiation betrieben und der simple Austausch eines XHTML-Doctypes durch einen HTML-Doctype wird in der Regel auch nicht valide sein. Entweder man verlässt sich darauf, dass die Browser bei Befolgung der Kompatiblitätsrichtlinien mit XHTML-Code klarkommen, oder aber man transformiert das gesamte Dokument.

Bei der Suche bin ich eben auch auf eine recht interessante Lösung gestoßen: http://spacergif.net/2006/08/06/serving-documents-as-applicationxhtmlxml-without-content-negotiation/

Nicht dass ich die für den Praxiseinsatz empfehlen würde, aber das ist mal ein netter, standardkonformer Trick, der einen anderen Bug im IE ausnutzt. Der eigentliche Grund, warum ich das hier erwähne, ist allerdings, dass der beschriebene Bug im IE und im W3C-Validator auch in Validome zu finden ist.

HTMELL, übernehmen sie. :)


19.11.2007 16:31:31
  Zitieren
HTMELL
Administrator

Registriert: 11.05.2006
Beiträge: 544
Hi,

HTMELL, übernehmen sie. :)

Lol, auf was für kranke Sachen die Leute kommen ist immer wieder erstaunlich. Da habe ich mal wieder etwas dazugelernt, ist mir ganz neu das Zeilenumbrüche in Headerdaten erlaubt sind - werde ich bei Gelegenheit einbauen...


_______________________________________
mfg
Thomas Mell

www.validome.org

19.11.2007 19:10:20
  Zitieren
Gurkenpapst
Mitglied

Registriert: 03.10.2007
Beiträge: 31
Ergänzung:

Wie in dem Kommentar auf der verlinkten Seite zu lesen ist das Beispiel leider doch nicht standardkonform. So weit hatte ich vorhin nicht mehr gelesen. Ein \r\n wäre allerdings Standardkonform und für den Fehlerfall empfiehlt RFC 2616 in Kapitel 19.3 auch folgendes:
The line terminator for message-header fields is the sequence CRLF. However, we recommend that applications, when parsing such headers, recognize a single LF as a line terminator and ignore the leading CR.


Validome *muss* also \r\n[SP] wie ein Space interpretieren und *sollte* \n[SP] oder \r[SP] wie ein Space interpretieren.

Wie sich die Browser bei \r\n verhalten, habe ich noch nicht getestet. Praktisch ist dieser Ansatz mit dem Zeilenumbruch leider eh nicht zu gebrauchen, da ein Proxy die Headerfelder normalisieren darf, wodurch dem IE dann ggf. ein Headerfeld ohne Zeilenumbruch präsentiert werden würde.


19.11.2007 20:58:09
  Zitieren
HTMELL
Administrator

Registriert: 11.05.2006
Beiträge: 544
Hep,
ich habe die Sache eben mal schnell eingebaut, ist ja nur ein kleiner RegExp.
Testfiles:
http://www.validome.org/check/misc/test ... header.php
http://www.validome.org/check/misc/test ... header.php
http://www.validome.org/check/misc/test ... header.php

Ich habe jetzt keinen Nerv und die Zeit mich durch die RFC zu wühlen, aber wie verhält es sich mit der Normalisierung bei nicht-Proxy (Browser, Validator etc.)?


_______________________________________
mfg
Thomas Mell

www.validome.org

19.11.2007 22:38:54
  Zitieren
Gurkenpapst
Mitglied

Registriert: 03.10.2007
Beiträge: 31
Der UA verarbeitet die Daten doch direkt, wozu sollte er sie vorher normalisieren? Es kommt doch nur darauf an, dass er die Daten korrekt in sein eigenes Format überführt. Oder habe ich dich missverstanden?

Bei dem meta-Element mit dem unsinnigen Content-Type-Wert nehme ich mal zu deinem Gunsten an, dass du den Code nur fix kopiert hast? :)

Der valide CRLF-Ansatz scheint also auch zum Austricksen des IE geeignet zu sein. Wegen dem Proxy-Problem leider dennoch nicht praxistauglich.


19.11.2007 23:14:05
  Zitieren
HTMELL
Administrator

Registriert: 11.05.2006
Beiträge: 544

Der UA verarbeitet die Daten doch direkt, wozu sollte er sie vorher normalisieren?

Mir geht es um die Darstellung unter "Erweiterte Einstellungen" -> "Headerdaten anzeigen". Darf ich die Daten normalisieren?

Bei dem meta-Element mit dem unsinnigen Content-Type-Wert nehme ich mal zu deinem Gunsten an, dass du den Code nur fix kopiert hast? :)
Richtig ;-)

_______________________________________
mfg
Thomas Mell

www.validome.org

20.11.2007 00:07:19
  Zitieren
Gurkenpapst
Mitglied

Registriert: 03.10.2007
Beiträge: 31
In diesem Fall sollte sich die Frage doch nicht mal stellen. Schließlich ist diese Anzeige als Diagnosewerkzeug zu sehen. Daher sollte sie die Daten nicht unnötig verändern.

Stell dir doch einfach mal vor, du würdest normalisieren. Ich lasse nun das besagte Testdokument validieren und die Headerdaten sagen mir, dass Content-Type: application/xhtml+xml gesendet worden wäre. Nun kann ich aus dieser nicht ganz korrekten Information und der Tatsache, dass es auch im IE angezeigt wird, zwei Schlussfolgerungen ziehen.

1.) Es wird Content-Negotiation genutzt und der IE erhält andere HTTP-Headerdaten

2.) Der IE unterstützt auf wundersame Weise auf einmal application/xhtml+xml

Beide Annahmen sind zwar bei den gegebenen Informationen logisch, aber bekanntermaßen falsch.

Idealerweise würde die Ausgabe also so präzise wie möglich sein und sogar Steuerzeichen in lesbaren Text umwandeln, wie es z. B. http://www.rexswain.com/httpview.html tut. Dann kann man sogar \r\n, \r, \n, \t und Space unterscheiden.

Beitrag geändert von Gurkenpapst (20.11.2007 15:54:20)


20.11.2007 15:50:28
  Zitieren
HTMELL
Administrator

Registriert: 11.05.2006
Beiträge: 544
Wo Du Recht hast, da hast Du Recht ;-)
Deine Anregungen haben mir gut gefallen und ich habe sie auch gleich umgesetzt.
Validiere mal mit eingeschalteten Headerdaten folgendes Dokument http://www.validome.org/check/misc/test ... header.php


_______________________________________
mfg
Thomas Mell

www.validome.org

20.11.2007 23:41:30
  Zitieren
Gurkenpapst
Mitglied

Registriert: 03.10.2007
Beiträge: 31
Schick. Ich bin immer wieder beeindruckt, wie schnell ihr solche Änderungen umsetzt.

Eventuell zur  Vollständigkeit noch den Punkt in die Legende aufnehmen.

Unter http://www.validome.org/validate/?uri=http%3A%2F%2Fwww.validome.org%2Fcheck%2Fmisc%2Ftestfiles%2FMISC_in_header.php verfolgt mich übrigens wieder der seltsame 410-Gone-Fehler. URIs außerhalb von validome.org lassen sich so problemlos validieren, aber die ganzen Demos von hier nicht. Irgendwas spielt da bei euch immer noch verrückt.


22.11.2007 00:19:47
  Zitieren
HTMELL
Administrator

Registriert: 11.05.2006
Beiträge: 544
Hi,
der 410er ist Absicht damit uns keiner in eine (fast) Endlosschleife schicken kann. Schließlich könnte man solche URL's validieren lassen, die wiederum solche URL's enthalten, usw...


_______________________________________
mfg
Thomas Mell

www.validome.org

22.11.2007 14:09:34
  Zitieren
Seiten: 1   Beitrag schreiben
Wechsel zu

Die letzten Beiträge aus diesen Forum

Valid HTML 4.01