Andreas Cloos: Validator austricksen

Hallo Zusammen,

wenn ich die Seite [http://www.cloos.li/index.htm] validiere kommt folgendes dabei heraus: http://validator.w3.org/check?uri=http%3A%2F%2Fwww.cloos.li%2Findex.htm.

Fragen dazu:

<script type="text/javascript">
<!--
document.write("<br><a href="ende.htm" class="nav" onfocus="this.blur()">ende</a>");
//-->
</script>

führt zu: Line 59, column 94: end tag for element "A" which is not open (explain...).
  ...nav" onfocus="this.blur()">ende</a>");
                                         ^
Naja, eigentlich bin ich mir da keiner Schuld bewußt, kann ich den Validator irgendwie davon überzeuen, daß das ja eigentlich doch valide ist?

Line 123, column 39: an attribute value literal can occur in an attribute specification list only after a VI delimiter

<br>Neue <a href="links.htm" onfocus:"this.blur()">Links</a> und...
                                     ^
Was ist daran falsch?

Und als letztes: Links zu Google-Groups sind perse nicht valide, oder?

Danke schonmal für Eure Anregungen.

--
Greetz,
Andreas
sh:( fo:) ch:| rl:| br:> n4:# ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:<
  1. Hallo,

    Line 123, column 39: an attribute value literal can occur in an attribute specification list only after a VI delimiter

    <br>Neue <a href="links.htm" onfocus:"this.blur()">Links</a> und...
                                         ^
    Was ist daran falsch?

    Da muss ein = hin, kein :.

    Und als letztes: Links zu Google-Groups sind perse nicht valide, oder?

    Keine Ahnung. Wie sieht so ein Link aus? Hat er ein & im Text? Diese muss man glaube ich durch & ersetzen.

    Viele Grüße,

    Stefan

  2. Hallo Andreas,

    führt zu: Line 59, column 94: end tag for element "A" which is not open (explain...).
      ...nav" onfocus="this.blur()">ende</a>");

    du musst das / maskieren: ...>ende</a>"); sollte afaik funktionieren

    <br>Neue <a href="links.htm" onfocus:"this.blur()">Links</a> und...
    Was ist daran falsch?

    das soll doch wohl nicht wirklich eine Frage sein, oder? :-)
    nicht ":" sondern "="...

    Und als letztes: Links zu Google-Groups sind perse nicht valide, oder?

    du musst & durch & ersetzten.

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. Hallo,

      du musst das / maskieren: ...>ende</a>"); sollte afaik funktionieren

      Urgs, ok. Ich Javascript-Depp.

      das soll doch wohl nicht wirklich eine Frage sein, oder? :-)
      nicht ":" sondern "="...

      Doch, aber glaube es oder lass es, ich habe bei Phase 5 mir das onfocus:"this.blur" als Tastenkombination hintelegt, anstatt es richtig mit dem "=" zu verwenden. Von daher: Einmal falsch, immer falsch :-(

      du musst & durch & ersetzten.

      Hm, schrieb Stefan auch, aber warum?

      --
      Greetz,
      Andreas
      sh:( fo:) ch:| rl:| br:> n4:# ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:<
      1. Hallo Andreas,

        onfocus:"this.blur"

        das ist afaik schlecht - wenn jemand mit der Tastatur navigieren will, funktioniert das nicht. Besser ist onclick="if(this.blur)this.blur;" (irgendwie so zumindest, steht aber auch irgendwo im Archiv)

        du musst & durch & ersetzten.
        Hm, schrieb Stefan auch, aber warum?

        weil & in html ein Sonderzeichen ist: http://selfhtml.teamone.de/html/allgemein/zeichen.htm#html_eigene

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hallo,

          du musst & durch & ersetzten.
          Hm, schrieb Stefan auch, aber warum?
          weil & in html ein Sonderzeichen ist: http://selfhtml.teamone.de/html/allgemein/zeichen.htm#html_eigene

          ja, schon klar. Ich war nur in meiner Naivität davon ausgegangen, daß der Sonderzeichencharakter in Links ignoriert würde und kam nicht auf die Idee, es eben auch in Links entsprechend zu ersetzen. Doof das.

          --
          Greetz,
          Andreas
          sh:( fo:) ch:| rl:| br:> n4:# ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:<
      2. du musst & durch & ersetzten.

        Hm, schrieb Stefan auch, aber warum?

        Das Und ist in HTML ein Sonderzeichen, mit dem (wie Du sicher weißt) Maskierungen für Nicht-ASCII-Zeichen eingleitet werden. Das Und kann nicht alleine stehen, weil dann niemand wissen könnte, was der Text "&"im HTML-Code bedeutet; soll da in der Anzeige "&" draus werden oder der Text "&"?

        Für normalen HTML-Code mag Dir das klar sein, Du vergisst aber anscheinend, das HTML nicht einfach beim ersten Anführungszeichen eines Parameters aufhört und danach wieder anfängt. Dementsprechend mußt Du also auch im href-Parameter vom <a> die HTML-Maskierung einsetzen.

        Genau genommen gehören diese mit Und eingeleiteten Maskierungen nicht so richtig zur eigentlichen HTML-Funktion, sondern sind vielmehr eine Art Zeichensatzerweiterung. Ihre Umsetzung ist also rein logisch weniger in der Anzeige eines HTML-Dokuments angesiedelt, auch nicht im Auflösen des HTML-Codes, sondern vielmehr ganz weit unten, dort wo die einzelnen Bytes von der Festplatte (oder aus dem Netz) gelesen werden und in den Puffer des Browsers wandern.

        Gruß,
          soenk.e

        1. Hi,

          Genau genommen gehören diese mit Und eingeleiteten Maskierungen nicht so richtig zur eigentlichen HTML-Funktion,

          Klar - sie sind eine SGML-Funktionalität. Siehe http://www.w3.org/TR/html401/intro/sgmltut.html#h-3.2, etwas runterscrollen zu den Entities...

          sondern sind vielmehr eine Art Zeichensatzerweiterung.

          In wiefern wird durch Entities der Zeichensatz ISO10646 (auch als Unicode bekannt) erweitert?
          http://www.w3.org/TR/html401/charset.html#h-5.1

          Wenn überhaupt, erweitern sie die Zeichen___kodierung___ (wenn nicht sowieso schon Unicode in Form von UTF-8 oder UTF-16 verwendet wird).

          cu,
          Andreas

          --
          Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
          http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
  3. Hallo Zusammen,

    So perfekt ist der Validator tatsächlich gar nicht.

    Wenn ich mit Javascript eine Tabelle ins Dokument schreibe, dann merkt der dann zwar, ob die Slashes der End-Tags maskiert sind oder nicht.
    Was er aber nicht bemerkt ist, wenn ich mir eine Tabelle ins Dokument ins Dokument schreiben lasse mit table height.
    Ergo: eine Überlistung ist möglich.

    Hihi

    perfetto

    1. Hi,

      So perfekt ist der Validator tatsächlich gar nicht.

      Nur weil Du seine Funktionsweise nicht verstehst...

      Wenn ich mit Javascript eine Tabelle ins Dokument schreibe, dann merkt der dann zwar, ob die Slashes der End-Tags maskiert sind oder nicht.

      Klar, weil die Zeichenfolge </ per Definition den Script-Elementinhalt beendet.

      Was er aber nicht bemerkt ist, wenn ich mir eine Tabelle ins Dokument ins Dokument schreiben lasse mit table height.

      Das darf er gar nicht merken, denn der Inhalt des Script-Elements ist CDATA. Und wenn das darin enthaltene Script zufällig HTML-tags schreibt, ändert das nichts am Datentyp des Script-Elementinhalts.

      Ergo: eine Überlistung ist möglich.

      Klar. Aber was bringt es? Es ist doch viel einfacher, style="height:200px;" zu verwenden, als sich darauf zu verlassen, daß der User auch Javascript aktiviert hat...

      cu,
      Andreas

      --
      Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
      http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
      1. Klar, weil die Zeichenfolge </ per Definition den Script-Elementinhalt beendet.

        Wer sagt denn, dass die HTML-Parser so dumm sind, und die Zeichenfolge
        </ von der Zeichenfolgen </script> nicht unterscheiden können?

        Da bräuchte man ja statt </script> nur mehr </> zu schreiben.

        Ergo: eine Überlistung ist möglich.

        Klar. Aber was bringt es?

        Umgekehrt musst du denken: Was bringts, wenn ein Code im Sinne des W3C gültig ist?
        Antwort: Nichts!
        Die Browser interpretieren den Code. Also muss er auf möglichst vielen einwandfrei laufen.

        ~
        perfetto

        1. Hallo perfetto,

          Umgekehrt musst du denken: Was bringts, wenn ein Code im Sinne des W3C
          gültig ist?
          Antwort: Nichts!
          Die Browser interpretieren den Code. Also muss er auf möglichst vielen
          einwandfrei laufen.

          Und wonach richten sich die besseren Browser bei ihrer Interpretation des
          Codes? Naaa?

          Genau, nach den Standards des W3C.

          • Tim
          --
          [x] Installiert Cräcker einen Newsreader.
        2. Hallo,

          Klar, weil die Zeichenfolge </ per Definition den Script-Elementinhalt beendet.

          Wer sagt denn, dass die HTML-Parser so dumm sind, und die Zeichenfolge
          </ von der Zeichenfolgen </script> nicht unterscheiden können?

          Sie müssen das gat nicht unterschieden, das ist das schöne an HTML als SGML anwendung.

          Da bräuchte man ja statt </script> nur mehr </> zu schreiben.

          Ein / reicht auch vollkommen.

          Schaus dir die Seite an in deinem Browser (quelltext!):

          und die selbe Seite im Validator:
          http://validator.w3.org/check?uri=http%3A%2F%2Fwww.meta-text.net%2Ftest%2Fminimal-html2.html

          -------------------------------------------------------
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
          <title/Mimimalisierung in HTML/
          <ol
           <li/erster Listenpunkt
           <li/zweiter Listenpunkt
           <br/
            meht Text im zweiten Punkt
           <li/dritter Listenpunkt
          </ol
           <p/Ein Textabsatz
          -------------------------------------------------------

          Ergo: eine Überlistung ist möglich.

          Ja, aber nicht so wie du es dir denkst.

          Grüße
          Thomas

        3. Hallo perfetto,

          Umgekehrt musst du denken: Was bringts, wenn ein Code im Sinne des W3C gültig ist?

          Siehe Archiv.

          Die Browser interpretieren den Code.

          Die Browser, die Du kennst.

          Also muss er auf möglichst vielen einwandfrei laufen.

          Wo ist denn ein Problem bei style="height: ...px;"?

          Viele Grüße,
          Christian

          --
          Ich bin ein Bandbreitenverschwender. Meine Signatur tut mir leid. Ehrlich!