|
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
HTMELL
Administrator
Registriert: 11.05.2006
Beiträge: 544
|
|
|
| 19.11.2007 22:38:54 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
Wechsel zu
Die letzten Beiträge aus diesen Forum
|
|