wake-up-neo.com

Gibt es eine Begrenzung für die Länge von HTML-Attributen?

Wie lang ist zu lang für einen Attributwert in HTML?

Ich verwende Datenattribute im HTML5-Stil (data-foo="bar") In einer neuen Anwendung und an einem Ort wäre es sehr praktisch, eine Menge Daten (über 100 Zeichen) zu speichern. Ich vermute zwar, dass dieser Betrag in Ordnung ist, wirft aber die Frage auf, wie viel zu viel ist.

204
nickf

HTML 4

Aus HTML 4-Sicht sind Attribute ein SGML-Konstrukt. Ihre Grenzen sind in der SGML-Deklaration von HTML 4 definiert:

 QUANTITY SGMLREF 
 ATTCNT 60 - erhöht - 
 ATTSPLEN 65536 - Dies sind die größten Werte - 
 LITLEN 65536 - zulässig in der Erklärung - 
 NAMELEN 65536 - Vermeiden Sie feste Grenzen in tatsächlichen - 
 PILEN 65536 - Implementierungen von HTML-UAs - 
 TAGLVL 100 
 TAGLEN 65536 
 GRPGTCNT 150 
 GRPCNT 64 

Der hier in Frage kommende Wert ist "ATTSPLEN". Dies ist die Grenze für die Attributspezifikationsliste eines Elements (dies sollte die Gesamtgröße aller Attribute für dieses Element sein). Der obige Hinweis erwähnt jedoch, dass feste Grenzwerte vermieden werden sollten, sodass es in den meisten Implementierungen wahrscheinlich kein reales Limit außer dem verfügbaren Speicher gibt.

HTML 5

HTML 5 scheint anders zu sein, da die Spezifikation sagt: "Diese Version von HTML kehrt somit zu einer Nicht-SGML-Basis zurück."

Später, wenn beschrieben wird, wie HTML 5 analysiert wird, erscheint die folgende Passage ( Hervorhebung hinzugefügt):

Der unten beschriebene Algorithmus setzt keine Grenze für die Tiefe des generierten DOM-Baums oder für die Länge von Tag-Namen, Attributnamen, Attributwerte , Textknoten usw. Obwohl Implementierer aufgefordert werden, willkürliche Beschränkungen zu vermeiden, ist dies der Fall Es wurde erkannt, dass praktische Bedenken Benutzeragenten wahrscheinlich dazu zwingen werden, Einschränkungen für die Schachtelungstiefe aufzuerlegen.

Ich nehme an, das ist deine Antwort.

249
bobbymcr

Ich habe gerade einen Test geschrieben , der eine Zeichenfolge mit der Länge 10 Millionen in ein Attribut einfügt und es dann erneut abruft, und es funktioniert gut (Firefox 3.5.2 & Internet Explorer 7)

50 Millionen lassen den Browser mit der Meldung hängen, dass das Abschließen dieses Skripts sehr lange dauert.

135
nickf

Ich glaube wirklich nicht, dass es Grenzen gibt. Ich weiß jetzt, dass du es kannst

<a onclick=" //...insert 100KB of javascript code here">

und es funktioniert gut. Wenn auch etwas unleserlich.

3
priestc

From HTML5-Syntax doc

9.1.2.3 Attribute

Attribute für ein Element werden im Starttag des Elements ausgedrückt.

Attribute haben einen Namen und einen Wert. Attributnamen müssen aus einem oder mehreren anderen Zeichen als den Leerzeichen U + 0000 NULL, U + 0022 Anführungszeichen ("), U + 0027 APOSTROPHE ('), U + 003E GROSSZEICHEN (>) und U + bestehen 002F SOLIDUS (/) und U + 003D EQUALS SIGN (=), die Steuerzeichen und alle Zeichen, die nicht in Unicode definiert sind In der HTML-Syntax können Attributnamen mit einer beliebigen Mischung aus Klein- und Großbuchstaben geschrieben werden Das ist eine ASCII Groß- und Kleinschreibung wird nicht berücksichtigt) Übereinstimmung mit dem Namen des Attributs.

Attributwerte sind eine Mischung aus Text- und Zeichenreferenzen, mit der zusätzlichen Einschränkung, dass der Text kein mehrdeutiges kaufmännisches Und enthalten darf.

Attribute können auf vier verschiedene Arten angegeben werden:

  1. Leere Attributsyntax

  2. Nicht zitierte Attributwertsyntax

  3. Syntax von Attributwerten in Anführungszeichen

  4. Syntax von Attributwerten in doppelten Anführungszeichen

Hier wurde keine Begrenzung der Größe des Attributwerts erwähnt. Ich denke, es sollte keine geben.

Sie können Ihr Dokument auch mit dem validieren

HTML5 Validator (sehr experimentell)

3
rahul

Ich habe noch nie von einer Begrenzung der Länge von Attributen gehört.

In den HTML 4.01-Spezifikationen gibt es im Abschnitt über Attribute nichts, was diesbezüglich eine Einschränkung erwähnen würde.

Dasselbe gilt für die HTML 4.01 DTD - Soweit ich weiß, können Sie in der DTD keine Länge für Attribute angeben.

Wenn dies in HTML 4 nicht der Fall ist, kann ich mir nicht vorstellen, dass für HTML 5 so etwas angezeigt wird, und im Abschnitt 9.1.2.3 Attribute für wird tatsächlich keine Längenbeschränkung angezeigt HTML 5 entweder.

1
Pascal MARTIN

Von http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data :

Für jedes HTML-Element kann eine beliebige Anzahl benutzerdefinierter Datenattribute mit einem beliebigen Wert angegeben werden.

Das, was zum Parsen/Verarbeiten dieser * Datenattributwerte verwendet wird, unterliegt Einschränkungen.

Es stellte sich heraus, dass die Datenattribute und -werte in einem DOMStringMap-Objekt platziert sind. Dies hat keine inhärenten Grenzen.

Von http://dev.w3.org/html5/spec/Overview.html#domstringmap :

Hinweis: Die hier angegebene DOMStringMap-Schnittstellendefinition ist nur für JavaScript-Umgebungen vorgesehen. Andere Sprachbindungen müssen definieren, wie DOMStringMap für diese Sprachen implementiert werden soll

DOMStringMap ist eine Schnittstelle mit einem Getter, Setter, Greator und Deleter. Der Setter hat zwei Parameter vom Typ DOMString, name und value. Der Wert ist vom Typ DOMString und wird direkt einer JavaScript-Zeichenfolge zugeordnet.

Von http://bytes.com/topic/javascript/answers/92088-max-allowed-length-javascript-string:

Die maximale Länge eines JavaScript-Strings ist implementierungsspezifisch.

[Anmerkung: chrome meldet bytes.com als Quelle von Malware, also Vorsicht]

1
user78706

Die SGML definiert Attribute mit einem Grenzwert von 65.000 Zeichen (siehe hier: http://www.highdots.com/forums/html/length-html-attribute-175546.html

Obwohl für das, was Sie tun, sollte es Ihnen gut gehen. Was die oberen Grenzen angeht, so habe ich gesehen, dass die Datenattribute von jQuery use auch einige k Daten enthalten.

0
SuperRoach