PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : InternetExplorer und W3C konformes XHTML


Sephiroth
2005-11-01, 18:34:01
Bei XHTML1.0 heißt es es ja u.A., daß man die XML-Deklaration
<?xml version="1.0" encoding="utf-8"?>
nicht unbedingt angeben braucht, es jedoch sehr empfohlen wird.
Link: http://www.w3.org/TR/xhtml1/#strict

Folge ich nun dieser Empfehlung, dann liefert mir der IE ein anderes Ergebnis als ohne. Wieso? :frown:

Beispiel: http://www.sephiroth-j.de/index3.php im Vergleich zur aktuellen Seite

MadMan2k
2005-11-01, 18:50:01
Folge ich nun dieser Empfehlung, dann liefert mir der IE ein anderes Ergebnis als ohne. Wieso? :frown:
weil er doof ist und dort das DOCTYPE erwartet

Marscel
2005-11-01, 20:20:43
Das Ding ist wirklich so stupide?

Ich hab mich auf des öfteren gewundert, warum der IE plötzlich im Ergebnis variiert... Sowas verdirbt einem wirklich die Lust, eine Seite zu gestalten.

Sephiroth
2005-11-01, 21:23:19
weil er doof ist und dort das DOCTYPE erwartet
Tatsache! :O Ich hab die XML-Deklaration mal spaßenshalber nach dem DOCTYPE gesetzt (ist natürlich totaler humbug, die muß wenn schon gleich am Anfang hin) und da sah es wieder normal aus. Aber das beste ist ja, der W3C Validator ließ das auch noch als gültiges XHTML 1.0 Strict durchgehen. X-D


/edit:
Ich werd' mir dann wohl eine Browser-Weiche für den IE in meinen PHP-Script für den Header einbauen und auch gleich den richtigen MIME-Type im HTTP-Header mit angeben (der meta-tag scheint da wohl rel. egal zu sein).

Gast
2005-11-01, 22:23:32
Tatsache! :O Ich hab die XML-Deklaration mal spaßenshalber nach dem DOCTYPE gesetzt (ist natürlich totaler humbug, die muß wenn schon gleich am Anfang hin) und da sah es wieder normal aus. Aber das beste ist ja, der W3C Validator ließ das auch noch als gültiges XHTML 1.0 Strict durchgehen. X-D


/edit:
Ich werd' mir dann wohl eine Browser-Weiche für den IE in meinen PHP-Script für den Header einbauen und auch gleich den richtigen MIME-Type im HTTP-Header mit angeben (der meta-tag scheint da wohl rel. egal zu sein).
Die XML-Deklaration nach dem Doctype sorgt dafür, dass der IE wieder in den standard-konformen Modus wechselt (und ist demnach kein humbug).
Dass der W3C Validator dass als gültiges XHTML durchgehen lässt liegt an:
"An XML declaration is not required in all XML documents; however XHTML document authors are strongly encouraged to use XML declarations in all their documents. Such a declaration is required when the character encoding of the document is other than the default UTF-8 or UTF-16 and no encoding was determined by a higher-level protocol." (Quelle: XHTML1.0 Recommendation, http://www.w3.org/TR/xhtml1/#docconf).
Erst lesen, dann schreiben. In diesen Dokumenten gibt es allerlei hilfreiche Dinge zu lesen, die dann solche "Probleme" erst gar nicht auftauchen lassen.

Füge eine ordentliche Zeichensatzdeklaration im Dokumentenkopf ein und lass den XML-Prolog einfach weg, dann ist alles gut.

Sephiroth
2005-11-01, 22:34:04
Die XML-Deklaration nach dem Doctype sorgt dafür, dass der IE wieder in den standard-konformen Modus wechselt (und ist demnach kein humbug).
Dass der W3C Validator dass als gültiges XHTML durchgehen lässt liegt an:
"An XML declaration is not required in all XML documents; however XHTML document authors are strongly encouraged to use XML declarations in all their documents. Such a declaration is required when the character encoding of the document is other than the default UTF-8 or UTF-16 and no encoding was determined by a higher-level protocol." (Quelle: XHTML1.0 Recommendation, http://www.w3.org/TR/xhtml1/#docconf).
Erst lesen, dann schreiben. In diesen Dokumenten gibt es allerlei hilfreiche Dinge zu lesen, die dann solche "Probleme" erst gar nicht auftauchen lassen.

Füge eine ordentliche Zeichensatzdeklaration im Dokumentenkopf ein und lass den XML-Prolog einfach weg, dann ist alles gut.
Das ist aber so nicht korrekt!
Wenn sie (die XML-Deklaration) verwendet wird, dann gleich am Anfang und nicht irgendwo im Dokument (deswegen humbug)! Ein korrekter Parser sollte dann einen Fehler ausgeben.

Übrigens habe ich mich weitesgehenst dort informiert (siehe Eingangspost) und meine Zeichensatzdeklaration ist auch korrekt. Ich wollte einzig und allein der Empfehlung folgen.


p.s.
Falls du mir das Wenn sie (die XML-Deklaration) verwendet wird, dann gleich am Anfang und nicht irgendwo im Dokument (deswegen humbug)! nicht glaubst, dann lies bitte folgenden Abschnitt (http://www.w3.org/TR/REC-xml/#sec-prolog-dtd) (das wird auch in dem von dir selbst verlinktem Abschnitt (http://www.w3.org/TR/xhtml1/#docconf) gezeigt).

Misda
2005-11-02, 01:40:41
Hi,

bei meinen Seiten benutze ich immer folgenden Code, vielleicht ist das was für dich :)

Gruß


<?

function isXhtml()
{
/* Prüfe, ob an den Browser XHTML ausgeliefert werden darf.
* Gibt TRUE zurück, wenn ja, FALSE, wenn nicht. */

/* In dubio pro HTML. */
$xhtml = FALSE;
$check_pattern = '|application/xhtml\+xml(?!\s*;\s*q=0)|';

/* Behauptet der Browser, XHTML zu können? */
if( ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1')
and isset($_SERVER['HTTP_ACCEPT'])
and preg_match($check_pattern, $_SERVER['HTTP_ACCEPT']))
{
$xhtml = TRUE;
}

/* Ältere Geckos haben ein paar Crashbugs mit XHTML. */
if(isset($_SERVER['HTTP_USER_AGENT']))
{
if(preg_match("|rv\:0.9|", $_SERVER['HTTP_USER_AGENT']))
{
$xhtml = FALSE;
}
}

return $xhtml;
}

if(isXhtml())
{
header('Content-Type: application/xhtml+xml');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store');
header('Vary: Accept');
header('Pragma: no-cache');

$strHeader = '<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">';
}
else
{
header('Content-Type: text/html');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store');
header('Vary: Accept');
header('Pragma: no-cache');

$strHeader = ' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>';
}

?>

Gast
2005-11-02, 10:04:29
Das ist aber so nicht korrekt!
Wenn sie (die XML-Deklaration) verwendet wird, dann gleich am Anfang und nicht irgendwo im Dokument (deswegen humbug)! Ein korrekter Parser sollte dann einen Fehler ausgeben.

Übrigens habe ich mich weitesgehenst dort informiert (siehe Eingangspost) und meine Zeichensatzdeklaration ist auch korrekt. Ich wollte einzig und allein der Empfehlung folgen.


p.s.
Falls du mir das nicht glaubst, dann lies bitte folgenden Abschnitt (http://www.w3.org/TR/REC-xml/#sec-prolog-dtd) (das wird auch in dem von dir selbst verlinktem Abschnitt (http://www.w3.org/TR/xhtml1/#docconf) gezeigt).

In dem von dir verlinkten, unter meinem Abschnitt stehenden Abschnitt steht folgendes ganz am Anfang: "XML Documents" - und das ist jetzt der Teil auf den ich hinaus will, aber was scheinbar nicht angekommen ist - "SHOULD", ok, ich schreibs noch mal "SHOULD" "SHOULD" "SHOULD" "SHOULD begin with a XML declaration which specifies the version of XML beeing used".

Gast
2005-11-02, 14:16:39
@ gast über mir

wo is dein Problem ???