Validator des W3C taugt nichts
Christoph Schaffhauser
- meinung
Hallo zusammen. Ich hab versucht meine Homepage CSS und Transitional HTML (4.01) konform zu gestalten. Das hat eigentlich ganz gut geklappt (siehe http://www.darkeagle.com/)
jedoch bin ich auf einen bug im Validator gestossen. Hier das testfile:
***************
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>Untitled</TITLE>
<meta http-equiv="content-type" content="Mime-Type; charset=ISO-8859-1">
<script type="text/javascript">
<!--
var xyz = "</SPAN>";
//-->
</script>
</HEAD>
<BODY>
</BODY>
</HTML>
***************
Diese Testseite gibt folgenden Fehler:
***************
Line 8, column 18:
var xyz = "</SPAN>";
^
Error: end tag for element "SPAN" which is not open; try removing the end tag or check for improper nesting of elements
***************
Anscheinend schnallt es der Validator nicht das der String "</SPAN>" kein Tag ist und demzufolge auch nichts zumachen will, da er ja in ein Javascript eingebungen ist.
Was denkt Ihr darüber?
behelfsmässig hab ich dann das script umgeschrieben dass es so ausschaut:
var xyz = "<" + "/SPAN>";
So schnallt ers dann
Gruss Christoph
hi
Anscheinend schnallt es der Validator nicht das der String "</SPAN>" kein Tag ist und demzufolge auch nichts zumachen will, da er ja in ein Javascript eingebungen ist.
tjo.. Das ist aber kein Vali-Bug, sondern eben ein Fehler in der Seite. Beachte, was passiert, wenn da ein Parser gaaaaaaaaaanz stur rübereiert, ohne zu wissen, wofür welches Tag da ist!
Grüße aus Bleckede
Kai
Hallo Kai,
Anscheinend schnallt es der Validator nicht das der String "</SPAN>" kein
Tag ist und demzufolge auch nichts zumachen will, da er ja in ein
Javascript eingebungen ist.
tjo.. Das ist aber kein Vali-Bug, sondern eben ein Fehler in der Seite.
Das sehe ich etwas anders. Ein SGML-Parser hat Sachen, die in Kommentaren stehen,
zu ignorieren.
Beachte, was passiert, wenn da ein Parser gaaaaaaaaaanz stur rübereiert, ohne
zu wissen, wofür welches Tag da ist!
Wenn er richtig funktioniert, muss er das, was zwischen <script> und </script>
steht, ignorieren, da Christoph diesen Teil in <!-- --> gepackt hat.
Gruesse,
CK
Wenn er richtig funktioniert, muss er das, was zwischen <script> und </script>
steht, ignorieren, da Christoph diesen Teil in <!-- --> gepackt hat.
Nein, ganz und gar nicht. Die Sequenzen <!-- und --> sind mitnichten Kommentar, wenn sie es wären, würde der Browser den Inhalt ignorieren und gar nicht an die JS-Engine weitergeben. script und style sind in HTML 4 als CDATA Elemente deklariert, jegliches Markup (also z.B. <a> oder &) wird dort ignoriert, also auch <!-- oder -->, einizge Ausnahme bildet die Kombination aus < und / und einem Buchstaben, diese Sequenz beendet CDATA-Elemente.
Hi Björn,
Nein, ganz und gar nicht. Die Sequenzen <!-- und --> sind mitnichten Kommentar, wenn sie es wären, würde der Browser den Inhalt ignorieren und gar nicht an die JS-Engine weitergeben. script und style sind in HTML 4 als CDATA Elemente deklariert, jegliches Markup (also z.B. <a> oder &) wird dort ignoriert, also auch <!-- oder -->, einizge Ausnahme bildet die Kombination aus < und / und einem Buchstaben, diese Sequenz beendet CDATA-Elemente.
danke für diese einleuchtende Erklärung. Bisher hatte ich mir immer "irgendetwas zusammengereimt", was vielleicht ungefähr in diese Richtung ging, aber wirklich klar war mir die Sache trotzdem nicht.
Cheatah
Nene :-) wenn der Parser drüberreitet sieht er ein " und weiss aha string.. dann müsste er weitersuchen bis er das abschliessende " findet... dieser Parser macht aber was falsch,...
hi
Anscheinend schnallt es der Validator nicht das der String "</SPAN>" kein Tag ist und demzufolge auch nichts zumachen will, da er ja in ein Javascript eingebungen ist.
tjo.. Das ist aber kein Vali-Bug, sondern eben ein Fehler in der Seite. Beachte, was passiert, wenn da ein Parser gaaaaaaaaaanz stur rübereiert, ohne zu wissen, wofür welches Tag da ist!
Grüße aus Bleckede
Kai
Hi,
Nene :-) wenn der Parser drüberreitet sieht er ein " und weiss aha string.. dann müsste er weitersuchen bis er das abschliessende " findet... dieser Parser macht aber was falsch,...
aus welchem Grund meinst Du, Anführungszeichen hätten in PCDATA irgendeine Bedeutung, die über das eigentliche Zeichen hinausgeht?
Ein SGML-Parser beherrscht _kein_ JavaScript. Er beherrscht SGML, also Strukturbeschreibungssprachen. _Keine_ Programmiersprachen. Er weiß nicht mal, dass sowas wie ein String überhaupt existiert. Oder sollte er "<b>hier</b>" etwa meinen, dass "<b>" und "</b>" zum Fließtext gehören? Naja, mal ganz abgesehen davon, dass es hier im Forum zufällig so ist ;-)
Cheatah
Hallo,
tu dir mal http://learn.to/quote an.
Nene :-) wenn der Parser drüberreitet sieht er ein " und weiss aha string..
dann müsste er weitersuchen bis er das abschliessende " findet...
Nein. Ein SGML-Parser muss kein JavaScript verstehen.
dieser Parser macht aber was falsch,...
Ja, aber nicht das, was du moniert hast. Er hat einfach den Inhalt von
Kommentaren zu ignorieren.
Gruesse,
CK
Hallo Miteinander
Anscheinend schnallt es der Validator nicht das der String "</SPAN>" kein Tag ist und demzufolge auch nichts zumachen will, da er ja in ein Javascript eingebungen ist.
tjo.. Das ist aber kein Vali-Bug, sondern eben ein Fehler in der Seite.
In der Seite von Christoph?*) Das glaube ich nicht. Ich kenne mich mit dem Zeug sicher nicht so gut aus, aber meiner ansicht nach ist die Seite Valide. Weil => Das "</SPAN>" ist ein String im JavaScript, da könnte auch sonst irgend was stehen. Wenn der Vali den JS-Code auch durchgeht und einen String der zufälligerweise etwas enthält, was mit etwas anderem in HTML übereinstimmt ist das sein 'Fehler'.
Beachte, was passiert, wenn da ein Parser gaaaaaaaaaanz stur rübereiert, ohne zu wissen, wofür welches Tag da ist!
Bei diesen Bedingungen ist natürlich klar, dass die Seite nicht valide ist. Dann darf man aber IMHO aber auch keine zusätzliche Sprache im HTML-File verwenden. Oder was würde dann der Vali zu dem folgendne Skript sagen?
<script type="text/javascript">
<!--
var a,b;
a = 3;
b = 2;
if( b<a ) {
alert(b);
}
if( b>a ) {
alert(a);
}
//-->
</script>
Hier würde er wohl den 'HTML-Tag' <a ) { alert(b); } if ( a> finden.
Ich würde aber nicht sagen, dass dies ein Bug im Vali sei, schliesslich ist er zum Validieren von HTML- und nicht JS-Dateien da.
MfG
Tom2
*) Vielleicht habe ich dich falsch verstanden und rede nur Müll ;-)
hi
Bei diesen Bedingungen ist natürlich klar, dass die Seite nicht valide ist. Dann darf man aber IMHO aber auch keine zusätzliche Sprache im HTML-File verwenden. Oder was würde dann der Vali zu dem folgendne Skript sagen?
genauso arbeitet ein PARSER.
<script type="text/javascript">
<!--
var a,b;
a = 3;
b = 2;
if( b<a ) {
alert(b);
}
if( b>a ) {
alert(a);
}
//-->
</script>
Hier würde er wohl den 'HTML-Tag' <a ) { alert(b); } if ( a> finden.
im Prinzip ja. ich bin jetzt aber überfragt, ob eines der Zeichen da verdeutlicht, dass er "nur" ein nicht codiertes "<" und ">" anmahnt.
Das einzige, was man dem Vali hier vorwerfen *könnte* ist, dass er in dem Kommentar ruminterpretiert..
Grüße aus Bleckede
Kai
Hi
Hier würde er wohl den 'HTML-Tag' <a ) { alert(b); } if ( a> finden.
im Prinzip ja. ich bin jetzt aber überfragt, ob eines der Zeichen da verdeutlicht, dass er "nur" ein nicht codiertes "<" und ">" anmahnt.
Anscheinend frisst ers :-(.
Das einzige, was man dem Vali hier vorwerfen *könnte* ist, dass er in dem Kommentar ruminterpretiert..
...was er nicht *dürfte* wenn man andere Sprachen in der Datei erlauben *wollte*. ;-)
MfG
Tom2
Hi Tom
Hab Spasseshalber dein Script mal durch den Validator gelassen. Er schien damit keine Probs zu haben. :-/
Gruss Christoph
Hallo Miteinander
Anscheinend schnallt es der Validator nicht das der String "</SPAN>" kein Tag ist und demzufolge auch nichts zumachen will, da er ja in ein Javascript eingebungen ist.
tjo.. Das ist aber kein Vali-Bug, sondern eben ein Fehler in der Seite.
In der Seite von Christoph?*) Das glaube ich nicht. Ich kenne mich mit dem Zeug sicher nicht so gut aus, aber meiner ansicht nach ist die Seite Valide. Weil => Das "</SPAN>" ist ein String im JavaScript, da könnte auch sonst irgend was stehen. Wenn der Vali den JS-Code auch durchgeht und einen String der zufälligerweise etwas enthält, was mit etwas anderem in HTML übereinstimmt ist das sein 'Fehler'.
Beachte, was passiert, wenn da ein Parser gaaaaaaaaaanz stur rübereiert, ohne zu wissen, wofür welches Tag da ist!
Bei diesen Bedingungen ist natürlich klar, dass die Seite nicht valide ist. Dann darf man aber IMHO aber auch keine zusätzliche Sprache im HTML-File verwenden. Oder was würde dann der Vali zu dem folgendne Skript sagen?
<script type="text/javascript">
<!--
var a,b;
a = 3;
b = 2;
if( b<a ) {
alert(b);
}
if( b>a ) {
alert(a);
}
//-->
</script>
Hier würde er wohl den 'HTML-Tag' <a ) { alert(b); } if ( a> finden.
Ich würde aber nicht sagen, dass dies ein Bug im Vali sei, schliesslich ist er zum Validieren von HTML- und nicht JS-Dateien da.
MfG
Tom2
*) Vielleicht habe ich dich falsch verstanden und rede nur Müll ;-)
Hallo.
var xyz = "</SPAN>";
Du solltest dir mal ansehn, welche Zeichen in JavaScript maskiert werden müssen/sollten: var xyz = "</SPAN>";
Gruß
Norbert
Hi Norbert
Thx für den Hinweis.. mit / klappts wirklich... hmm nur hab ich bei SelfHTML nurgends gesehen dass der / auch maskiert werden muss. :-/
Gruss Christoph
Hallo.
var xyz = "</SPAN>";
Du solltest dir mal ansehn, welche Zeichen in JavaScript maskiert werden müssen/sollten: var xyz = "</SPAN>";
Gruß
Norbert
hi zusammen
also dass der / maskiert werden muss ist mir auch neu...
Klar funktionierts, aber dennoch bin auch ich der Meinung dass der Validierer hier nichts motzen darf!
kaepten
hi
also dass der / maskiert werden muss ist mir auch neu...
Das "</" muss vermieden werden.
Grüße aus Bleckede
Kai
nur hab ich bei SelfHTML nurgends gesehen dass
der / auch maskiert werden muss. :-/
http://selfsuche.teamone.de/cgi-bin/such.pl?suchausdruck=\%2F+maskier&index_1=on&hits=10
-> http://selfhtml.teamone.de/javascript/objekte/document.htm#write
hi,
Although the STYLE and SCRIPT elements use CDATA for their data model, for these elements, CDATA must be handled differently by user agents. Markup and entities must be treated as raw text and passed to the application as is. The first occurrence of the character sequence "</" (end-tag open delimiter) is treated as terminating the end of the element's content. In valid documents, this would be the end tag for the element. http://www.w3.org/TR/html4/types.html#type-cdata
ich verstehe das so das er ab dem "</" das script tag schließen muß
und da bei dir das erste "</" nicht zu einem "script>" gehört hat er den
fehler angezeigt. also verhält sich der validator so wie sich das w3
sich das vorstellt.
schöne grüße
FICHTL
Thx für den Hinweis... scheint die Erklärung für das Verhalten des Valis zu sein
Gruss Christoph
hi,
Although the STYLE and SCRIPT elements use CDATA for their data model, for these elements, CDATA must be handled differently by user agents. Markup and entities must be treated as raw text and passed to the application as is. The first occurrence of the character sequence "</" (end-tag open delimiter) is treated as terminating the end of the element's content. In valid documents, this would be the end tag for the element. http://www.w3.org/TR/html4/types.html#type-cdata
ich verstehe das so das er ab dem "</" das script tag schließen muß
und da bei dir das erste "</" nicht zu einem "script>" gehört hat er den
fehler angezeigt. also verhält sich der validator so wie sich das w3
sich das vorstellt.
schöne grüße
FICHTL
Hoi,
ich verstehe das so das er ab dem "</" das script tag schließen muß
und da bei dir das erste "</" nicht zu einem "script>" gehört hat er den
fehler angezeigt. also verhält sich der validator so wie sich das w3
sich das vorstellt.
Nicht ganz. Das W3C sagt, dass da kein Kommentar stehen soll. Da steht aber ein
Kommentar. Und alles, was innerhalb eines Kommentares steht, hat ein
SGML-Parser (und ein XML-Parser auch) gefaelligst zu ignorieren. Basta.
Gruesse,
CK
Hallo,
ich verstehe das so das er ab dem "</" das script tag schließen muß
und da bei dir das erste "</" nicht zu einem "script>" gehört hat er den
fehler angezeigt. also verhält sich der validator so wie sich das w3
sich das vorstellt.
Nicht ganz. Das W3C sagt, dass da kein Kommentar stehen soll. Da steht aber ein
Kommentar. Und alles, was innerhalb eines Kommentares steht, hat ein
SGML-Parser (und ein XML-Parser auch) gefaelligst zu ignorieren. Basta.
Ich habe da nochmal drueber nachgedacht. Ich nehme alles zurueck, der Validator
verhaelt sich korrekt. Innerhalb von <script></script> ist alles CDATA, das
heisst, es *gibt* gar keine Kommentare.
Gruesse,
CK
Hallo
Ich habe da nochmal drueber nachgedacht. Ich nehme alles zurueck, der Validator
verhaelt sich korrekt. Innerhalb von <script></script> ist alles CDATA, das
heisst, es *gibt* gar keine Kommentare.
Du hast recht. Das erklärt auch, wieso mein Beispielskript korrekt war.
MfG
Tom2
Hallo nochmal
Also zusammenfassend kommen wir glaube ich zu Folgendem Schluss:
zwischen <script> und </script> darf kein "</" auftauchen, da der Parser dann den Scripttag beenden würde. "</" muss maskiert werden ("</") so dass es valid wird.
Der Kommentar spielt überhaupt keine Rolle, da der nur für ältere Browser gedacht ist die Scripte nicht interpretieren.
Ich danke hier nochmal allen die mir geholfen haben das kleine Problem mit dem Valitaror zu verstehen.
Gruss Christoph