KeinBlase: HTML Validierung: <FOO /> - Fehler

Hallo

Ich habe meine Webseite nach w3c ausgewertet und bekomme Fehlermeldungen, welche auf z.b. den Schrägstrich bei <br /> verweisen. Ich bekomme diese Fehlermeldung:
-----------------------------------
The sequence <FOO /> can be interpreted in at least two different ways, depending on the DOCTYPE of the document. For HMTL 4.01 Strict, the '/' terminates the tag <FOO (with an implied '>'). However, since many browsers don't interpret it this way, even in the presence of an HMTL 4.01 Strict DOCTYPE, it is best to avoid it completely in pure HTML documents and reserve its use solely for those written in XHTML.
-----------------------------------

Wie kann ich dies verhindern, bsw. den Fehler beheben (ohne die Schrägstriche zu entfernen)? Was bedeutet dies?

Thx

  1. Mahlzeit,

    Wie kann ich dies verhindern, bsw. den Fehler beheben (ohne die Schrägstriche zu entfernen)? Was bedeutet dies?

    Wie sieht Dein DOCTYPE aus?

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

      Gruss und Dank

  2. Ich habe meine Webseite nach w3c ausgewertet und bekomme Fehlermeldungen, welche auf z.b. den Schrägstrich bei <br /> verweisen.

    Welche (X)HTML-Variante?

    Wie kann ich dies verhindern, bsw. den Fehler beheben (ohne die Schrägstriche zu entfernen)? Was bedeutet dies?

    Ohne Arme keine Kekse. Will sagen, ohne Doctype und angemeckertes Element wirds nur Rumgerate, also pack mal Butter bei die Fische. Für HTML: http://www.w3.org/TR/html401/intro/sgmltut.html#h-3.2.1, für XHTML: http://www.w3.org/TR/xhtml1/#h-4.3

    JJ

  3. Hallo,

    Wie kann ich dies verhindern, bsw. den Fehler beheben (ohne die Schrägstriche zu entfernen)?

    Ohne die Schrägstriche zu entfernen? Gar nicht.

    Der Hintergrund ist der: HTML baut auf SGML auf. SGML ist ein ziemlich komplizierter Standard mit einigen Eigenschaften, die dem normalen HTML-Autor nicht unbedingt bekannt sind. Zum Beispiel ist in HTML folgendes erlaubt:

    <p/Hallo Welt!/

    Und der Standard schreibt vor, dass dies genauso zu interpretieren ist, wie:

    <p>Hallo Welt!</p>

    Genauso ist es möglich, einfach <br/ zuschreiben, das wäre in HTML genauso zu interpretieren wie <br> (weil <br> ein leeres Element ist, ist nach dem ersten Schrägstrich aber Schluss, bei <br/Hallo Welt!/ hat der zweite Schrägstrich keine besondere Bedeutung mehr).

    wenn Du also sowas wie <br/> schreibst, dann ist das eigentlich zu interpretieren wie <br>> - und weil das zweite > direkt vorkommt ohne Teil eines Tags zu sein, führt das im Endeffekt zu einer Äquivalenz mit <br>&gt;.

    Soviel zum Standard.

    Den Browsern ist das jedoch vollkommen egal, die interpretieren diese SGML-Eigenheiten von HTML nicht. Sprich: <br /> macht in heutigen Browsern absolut keine Probleme.

    Die Warnung vom Validator sagt nur folgendes aus: Sollte sich jemals irgend ein Client an SGML halten (es gab mal ein paar eher obskure Fälle), fliegt der auf die Schnauze, wenn er Deinen Code sieht. Daher empfiehlt er Dir, den Schrägstrich zu entfernen, damit Du diese Problem nicht hast. Allerdings ist die Meldung vom Validator auch nur das, was sie ist: Eine Warnung. Die kannst Du auch, wenn Du Dir der Konsequenzen bewußt bist, ignorieren. In diesem Fall würde ich das Problemrisiko als extrem gering einschätzen, Browser und andere Clients können sich ob des vielen kaputten Codes da draußen (und damit meine ich nicht sowas wie Du hier ansprichst, sondern richtig kaputten Code) sowieso nicht leisten, SGML vollständig umzusetzen, die meisten Webseiten würden sonst nicht mehr korrekt funktionieren.

    Du kannst mit Schrägstrichen allerdings an zwei Probleme mit dem Validator stoßen:

    1. Bei der Verwendung von Strict: Da <br /> im Endeffekt als <br>&gt; interpretiert wird, fügst Du damit aus Sicht des Validators Text (nämlich &gt;) ein. Bei <br /> ist das kein Problem, aber bei <hr /> kannst das z.B. zum Problem werden, wenn Du es innerhalb eines Elements verwendest, was keinen Text erlaubt in Strict, z.B. <body> direkt. Dann wäre die Seite nicht valide.

    2. Bei Angaben im <head> wie <link /> oder <meta />: Bei Strict ist das komplett invalide, bei Transitional führt das erste Auftreten von normalem Text im <head> dazu, dass <head> implizit geschlossen wird und <body> implizit geöffnet wird - und wenn danach wieder ein Element kommt, was nur in <head> erlaubt ist oder Du irgnedwann <head> zumachst oder <body> aufmachst (was man aber im Normalfall tut!), dann haut Dir der Validator das auch um die Ohren.

    Daher: Wenn es nur um <br />, <input />, <img /> o.ä. geht (also etwas, was sowieso immer erlaubt ist, wo auch Text erlaubt ist), ignoriere die Warnung, wenn es sogar nur Transitional ist, dann kannst Du sie auch für alle anderen Elemente irgendwo innerhalb von <body> ignorieren (wie z.B. <hr />), bei Elementen im Seitenkopf solltest Du dagegen immer die Schrägstriche entfernen, sonst wird Dir der Validator die Seite um die Ohren hauen (was zwar für sich genommen nicht schlimm ist, weil die Seite dann trotzdem unter allen Clients funktioniert, wenn Du aber zig Validatorfehler mit obskuren Folgefehlern bekommst, dann geht der Nutzen des Validators als Fehleranalysetool gegen Null, weil Du damit den eigenen Fehlerwald nicht mehr vor lauter Bäumen findest).

    Als Alternative kannst Du natürlich gleich auch XHTML nehmen (da gibt's auch Transitional) - dort MUSST Du allerdings die Schrägstriche hinzufügen, dort sind sie Pflicht (siehe auch SELFHTML dazu).

    Viele Grüße,
    Christian

  4. @@KeinBlase:

    The sequence <FOO /> can be interpreted in at least two different ways, depending on the DOCTYPE of the document. For HMTL 4.01 Strict, the '/' terminates the tag <FOO (with an implied '>'). However, since many browsers don't interpret it this way, even in the presence of an HMTL 4.01 Strict DOCTYPE, it is best to avoid it completely in pure HTML documents and reserve its use solely for those written in XHTML.

    Wie kann ich dies verhindern, bsw. den Fehler beheben (ohne die Schrägstriche zu entfernen)? Was bedeutet dies?

    Genau das, was dasteht: '/' beendet in HTML (SGML) einen Tag.

    Wenn du '<br />' notierst, dann hast du einen Tag '<br /' und ein Zeichen '>', was wohl nicht das ist, was du beabsichtigst, und was auch Browser meist nicht so interpretieren.

    An Stellen, wo kein Zeichen '>' stehen darf (bspw. im 'head'), ist es ein Fehler:

    <head>  
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
      <title>Lorem ipsum</title>  
    </head>
    

    ist kein valides HTML 4.01.

    Willst du HTML 4.01 schreiben, schreibe nicht '/>', sondern '>' (lösche also die vorhandenen '/').

    Willst du XHTML 1.0 schreiben (IMHO vorteilhafter), dann ist '/>' bei leeren Elementen richtig. Dann aber auch die anderen Unterschiede beachten!

    Live long and prosper,
    Gunnar

    --
    „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)