Validieren
Iris
- html
Hallo ich versuche mich grad an meiner Homepage. Und zwar nutze ich dazu das Programm Homesite von Macromedia. In diesem Programm kann ich meine Seite validieren lassen. Homesite sagt mir ich darf ein <img> Tag nicht schließen. Lasse ich die Seite von meinem Mozilla Validieren gibt es mir einen Fehler aus wenn ich den Tag nicht schließe.
so und wem soll ich jetzt glauben?
Grüße und danke für die Antwort
Hi!
Hallo ich versuche mich grad an meiner Homepage. Und zwar nutze ich dazu das Programm Homesite von Macromedia. In diesem Programm kann ich meine Seite validieren lassen. Homesite sagt mir ich darf ein <img> Tag nicht schließen. Lasse ich die Seite von meinem Mozilla Validieren gibt es mir einen Fehler aus wenn ich den Tag nicht schließe.
In diesem Fall Mozilla, allgemein http://validator.w3.org !
Freundliche Grüße aus Nürnberg,
Tobias
Hallo Iris,
Homesite sagt mir ich darf ein <img> Tag nicht schließen.
das ist nur die halbe Wahrheit. Zunächst mal ist img ein sogenanntes leeres Element, es besteht also nicht aus öffnendem Tag, Inhalt, schließendem Tag wie p oder div. So gesehen hat Homesite Recht.
In HTML ist daher die Struktur
<img src="..." alt="...">
völlig korrekt. Ein schließendes Tag </img> gibt es nicht.
Wenn du allerdings XHTML verwendest, sieht's ein wenig anders aus. In XHTML muss *jedes* Element auch wieder geschlossen werden. Bei Elementen, die wie img keinen Inhalt haben, verwendet man da die Schreibweise
<img src="..." alt="..." />
Das '/>' steht hier als Kurzform für das schließende Tag. Tatsächlich haben sogar manche Browser ein Problem mit der formal korrekten Notation <img ...></img>.
so und wem soll ich jetzt glauben?
Wie Tobias schon sagte: Der einzigen offiziellen Instanz, dem W3C-Validator.
Schönen Abend noch,
Martin
Hi,
Wenn du allerdings XHTML verwendest, sieht's ein wenig anders aus. In XHTML muss *jedes* Element auch wieder geschlossen werden. Bei Elementen, die wie img keinen Inhalt haben, verwendet man da die Schreibweise
<img src="..." alt="..." />
Das '/>' steht hier als Kurzform für das schließende Tag. Tatsächlich haben sogar manche Browser ein Problem mit der formal korrekten Notation <img ...></img>.
ist es ein Fehler vom Browser das <textarea></textarea> ein anderes Ergebnis erzeugt als <textarea />? Wenn ich das richtig sehe schon, oder? Meiner XML-Transformationssoftware habe ich das Abkürzen für bestimmte Elemente umständlich abgewöhnt, weil es zu Problemen führte. Gibt es dafür eine elegantere Lösung, oder muss man es momentan als Browser-Workaround akzeptieren? Selbst aktuelles Gecko verhält sich so. Ist zu erwarten dass dieser sich in naher Zukunft anders verhält?
Schöne Grüße
Julian
Hallo Julian,
ist es ein Fehler vom Browser das <textarea></textarea> ein anderes Ergebnis erzeugt als <textarea />? Wenn ich das richtig sehe schon, oder?
ich glaube nicht. Denn textarea ist im Gegensatz zu img nicht per Definition ein leeres Element, sondern es *hat* einen Inhalt. Okay, der Inhalt kann ein Leerstring sein, aber er existiert formal. Daher würde ich die Schreibweise <textarea /> für falsch halten.
Ist zu erwarten dass dieser sich in naher Zukunft anders verhält?
IMHO nein. Denn wir sprechen hier von einer Schreibweise, die so nicht vorgesehen ist. Entsprechend ist auch das Ergebnis Glückssache.
Ciao,
Martin
Hi,
ich finde es sehr irritierend das <tag></tag> nicht zwingend das gleiche ist wie <tag />. <tag /> müsste wegen der Typdefinition doch schon so angegeben sein, dass es einen Inhalt hat, d. h. rein strukturell betrachtet müsste der Browser das anhand der DTD automatisch erkennen.
Schöne Grüße
Julian
Hallo,
[...] rein strukturell betrachtet müsste der Browser das anhand der DTD automatisch erkennen.
das dürfte daran scheitern, dass kein mir bekannter Browser tatsächlich die DTD liest und auswertet, geschweige denn den Quellcode gegen die DTD validiert. Stattdessen sind die Regeln der "üblichen" DTDs im SGML-Parser der Browser hart codiert (einschließlich einiger Abweichungen aus Faulheit oder Bequemlichkeit der Programmierer).
Bye,
Martin
Hello out there!
ich finde es sehr irritierend das <tag></tag> nicht zwingend das gleiche ist wie <tag />.
Doch, das ist das Gleiche, wenn das XHTML als XML verarbeitet wird (application/xhtml+xml).
Wird das XHTML durch den Tag-Soup-Parser gejagt (text/html), ist <tag /> dasselbe wie <tag>; das Element wird nicht explizit geschlossen, sondern der Browser schließt es implizit beim ersten Auftreten eines Elements, das nicht in dem tag-Element vorkommen darf.
http://gangstaplaya.de/TEST/html-xml-20060630.html (text/html) und http://gangstaplaya.de/TEST/html-xml-20060630.xhtml (application/xhtml+xml) werden trotz identischem Quelltext* verschieden dargestellt.
See ya up the road,
Gunnar
* bis auf HTTP-EQUIV-Angabe
Hi,
wenn ich meine Dokumente also mit <?php header("Content-Type: application/xhtml+xml\r\n"); ?> beginnen lasse hat sich das Problem erledigt? Gibt es Browser, die damit Schwierigkeiten haben? Vielen Dank für den Tipp. Kanns grade nicht ausprobieren, hab hier momentan kein PHP zur Hand.
Schöne Grüße
Julian
Hallo Julian.
wenn ich meine Dokumente also mit <?php header("Content-Type: application/xhtml+xml\r\n"); ?> beginnen lasse hat sich das Problem erledigt? Gibt es Browser, die damit Schwierigkeiten haben?
Ja: der IE. Deshalb sollte man wohl besser dies hier nutzen:
if (isset($_SERVER['HTTP_ACCEPT']) and stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml')) {
header('content-type: application/xhtml+xml; charset=utf-8');
} else {
header('content-type: text/html; charset=utf-8');
}
Da der IE standardmäßig „*/*“ als Wert für HTTP_ACCEPT sendet, wird er hiermit als Lügner entlarvt und bekommt, was er versteht.
Einen schönen Samstag noch.
Gruß, Ashura
Es kann aber auch sein, dass der Browser ausdrücklich angibt, dass text/html gegenüber application/xhtml+xml bevorzugt wird. Wenn man das berücksichtigen will, geht das so:
$xhtml = false;
if (preg_match('/application\/xhtml\+xml(;q=(\d+\.\d+))?/i', $_SERVER['HTTP_ACCEPT'], $matches))
{
$xhtmlQ = isset($matches[2]) ? $matches[2] : 1;
if (preg_match('/text\/html(;q=(\d+\.\d+))?/i', $_SERVER['HTTP_ACCEPT'], $matches))
{
$htmlQ = isset($matches[2]) ? $matches[2] : 1;
$xhtml = ($xhtmlQ >= $htmlQ);
}
else $xhtml = true;
}
if($xhtml) { header('content-type: application/xhtml+xml; charset=utf-8'); }
else { header('content-type: text/html; charset=utf-8'); }
Hi,
dann kann ich damit mir aber die Anpassung meiner XML-Daten trotzdem nicht ersparen, schließlich würde der IE es als HTML statt als XML parsen und fehlerhaft darstellen. Ist IE7 da besser?
Schöne Grüße
Julian
hi,
dann kann ich damit mir aber die Anpassung meiner XML-Daten trotzdem nicht ersparen, schließlich würde der IE es als HTML statt als XML parsen und fehlerhaft darstellen. Ist IE7 da besser?
Vermutlich nicht - IIRC wird auch der IE 7 mit application/xhtml+xml nichts vernünftiges anzufangen wissen. Die Entwickler haben eindeutig verlauten lassen, dass sie einer Implementierung dessen keine große Priorität einräumen werden.
gruß,
wahsaga
Hello out there!
ich glaube nicht. Denn textarea ist im Gegensatz zu img nicht per Definition ein leeres Element, sondern es *hat* einen Inhalt. Okay, der Inhalt kann ein Leerstring sein, aber er existiert formal.
Kein Inhalt ist kein Inhalt und leer ist leer.
Daher würde ich die Schreibweise <textarea /> für falsch halten.
Nein, sie ist korrekt und bedeutet exakt dasselbe wie <textarea></textarea>, wenn das als XML (application/xhtml+xml) verarbeitet wird.
Ein Tag-Soup-Parser (text.html) interessiert sich dagegen nicht für den '/'; das Element wird nicht explizit geschlossen. Laut DTD ist aber das End-Tag beim textarea-Elementtyp nicht optional, deshalb wäre das Fehlen des End-Tags ein Fehler.
IMHO nein. Denn wir sprechen hier von einer Schreibweise, die so nicht vorgesehen ist.
Doch, das ist sie.
Entsprechend ist auch das Ergebnis Glückssache.
Nein, Sache der Verarbeitung (application/xhtml+xml vs. text.html).
See ya up the road,
Gunnar
Hello out there!
Homesite sagt mir ich darf ein <img> Tag nicht schließen. Lasse ich die Seite von meinem Mozilla Validieren gibt es mir einen Fehler aus wenn ich den Tag nicht schließe.
Verwendest du XHTML? Und Homesite prüft gegen die Regeln von HTML 4.01?
In HTML 4.01 ist es so korrekt:
<img src="foo" alt="bar">
In XHTML 1.x so:
<img src="foo" alt="bar"></img>
oder so:
<img src="foo" alt="bar" />
Wobei erste Variante nicht verwendet werden sollte, wenn das XHTML-Dokument durch den Tag-Soup-Parser der Browser verarbeitet wird (text/html), also HTML-kompatibel sein soll.
See ya up the road,
Gunnar
Danke für die vielen Antworten. Und den link! Das war wirklich sehr hilfreich !!!!!
Schönen Abend noch,-)
Iris