Y a-t-il une limite à la longueur des attributs HTML?

213

Combien de temps est trop long pour une valeur d'attribut en HTML?

J'utilise des attributs de données de style HTML5 ( data-foo="bar") dans une nouvelle application, et en un seul endroit, il serait vraiment pratique de stocker un bon nombre de données (jusqu'à 100 caractères). Bien que je soupçonne que ce montant est correct, cela soulève la question de savoir combien est trop?

nickf
la source
1
Pour information, un autre attribut qui devrait être très long est iframe@srcdoc( MDN (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) - [HTML5.2 qui contient un document entier ( J'ai entendu dire que vous aimiez les documents, alors (…) )
FelipeAls

Réponses:

265

HTML 4

Du point de vue HTML 4, les attributs sont une construction SGML. Leurs limites sont définies dans la déclaration SGML de HTML 4 :

         QUANTITY SGMLREF
                  ATTCNT 60 - augmenté -
                  ATTSPLEN 65536 - Ce sont les plus grandes valeurs -
                  LITLEN 65536 - autorisé dans la déclaration -
                  NAMELEN 65536 - Evitez les limites fixes en réalité -
                  PILEN 65536 - implémentations de HTML UA -
                  TAGLVL 100
                  TAGLEN 65536
                  GRPGTCNT 150
                  GRPCNT 64

La valeur en question ici est "ATTSPLEN" qui serait la limite sur la liste de spécification d'attribut d'un élément (qui devrait être la taille totale de tous les attributs pour cet élément). La note ci-dessus mentionne cependant que les limites fixes doivent être évitées, il est donc probable qu'il n'y ait pas de limite réelle autre que la mémoire disponible dans la plupart des implémentations.

HTML 5

HTML 5 semble être différent, comme le dit la spécification , "Cette version de HTML revient donc à une base non SGML."

Plus tard, en décrivant comment analyser HTML 5, le passage suivant apparaît ( soulignement ajouté):

L'algorithme décrit ci-dessous ne limite pas la profondeur de l'arborescence DOM générée, ni la longueur des noms de balise, des noms d' attribut, des valeurs d'attribut , des nœuds de texte, etc. Bien que les implémenteurs soient encouragés à éviter les limites arbitraires, il est reconnu que forcera probablement les agents utilisateurs à imposer des contraintes de profondeur d'imbrication.

Donc je suppose que c'est votre réponse.

bobbymcr
la source
25
La réponse devrait donc être "illimitée"?
Anders Lindén
1
Je vous remercie! Bien que je ne puisse pas voter, cette réponse serait merveilleuse si elle était précédée de quelque chose comme "Les attributs HTML n'ont théoriquement pas de limite de taille". C'est beaucoup de lecture juste pour repartir avec une réponse aussi simple.
rinogo
144

Je viens d' écrire un test qui met une chaîne de 10 millions de long dans un attribut, puis le récupère à nouveau, et cela fonctionne très bien (Firefox 3.5.2 & Internet Explorer 7)

50 millions font que le navigateur se bloque avec le message "Ce script est long à terminer".

nickf
la source
4
10 millions, c'est une énorme quantité de données.
rahul
3
Je viens de modifier ce script pour définir la taille à 50 millions et cela a fonctionné, mais le définir à 100 millions a tué l'onglet dans Chrome avant même de pouvoir le tester. : P
cHao
4
@nickf: Il est pratiquement limité (par exemple par la mémoire) mais théoriquement illimité;)
Tim Schmelter
mémoire insuffisante écrasée
holmium
Merci de vous être rendu directement à la marchandise. Si je voulais lire la spécification SGML, je rechercherais la spécification SGML!
rinogo
6

Je ne pense vraiment pas qu'il y ait de limite. Je sais que maintenant tu peux faire

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

et ça marche bien. Quoique un peu illisible.

prêtre
la source
27
Un peu. -----
Paul Draper
4

Du document de syntaxe HTML5

9.1.2.3 Attributs

Les attributs d'un élément sont exprimés à l'intérieur de la balise de début de l'élément.

Les attributs ont un nom et une valeur. Les noms d'attribut doivent être constitués d'un ou de plusieurs caractères autres que les caractères d'espacement, U + 0000 NULL, U + 0022 POINT DE COTATION ("), U + 0027 APOSTROPHE ('), U + 003E PLUS GRAND QUE LE SIGNE (>), U + 002F SOLIDUS (/) et U + 003D EQUALS SIGN (=), les caractères de contrôle et tout caractère non défini par Unicode. Dans la syntaxe HTML, les noms d'attribut peuvent être écrits avec n'importe quel mélange de lettres minuscules et majuscules qui sont une correspondance ASCII insensible à la casse pour le nom de l'attribut.

Les valeurs d'attribut sont un mélange de références de texte et de caractères, sauf avec la restriction supplémentaire que le texte ne peut pas contenir une esperluette ambiguë.

Les attributs peuvent être spécifiés de quatre manières différentes:

  1. Syntaxe d'attribut vide

  2. Syntaxe de valeur d'attribut non cotée

  3. Syntaxe de valeur d'attribut entre guillemets simples

  4. Syntaxe de valeur d'attribut entre guillemets

Ici, il n'y a pas mentionné de limite sur la taille de la valeur d'attribut. Je pense donc qu'il ne devrait pas y en avoir.

Vous pouvez également valider votre document par rapport au

Validateur HTML5 (hautement expérimental)

rahul
la source
1

Je n'ai jamais entendu parler de limite sur la longueur des attributs.

Dans les spécifications HTML 4.01, dans la section Attributs , rien ne mentionne de limitation à ce sujet.

Idem dans la DTD HTML 4.01 - en fait, pour autant que je sache, la DTD ne vous permet pas de spécifier une longueur pour les attributs.

S'il n'y a rien à ce sujet dans HTML 4, je n'imagine rien de tel qui pourrait apparaître pour HTML 5 - et je ne vois en fait aucune limitation de longueur dans la section Attributs 9.1.2.3 pour HTML 5 non plus.

Pascal MARTIN
la source
1

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

Chaque élément HTML peut avoir un nombre quelconque d'attributs de données personnalisés spécifiés, avec n'importe quelle valeur.

Ce qui est utilisé pour analyser / traiter ces valeurs d'attribut data- * aura des limites.

Il s'avère que les attributs de données et les valeurs sont placés dans un objet DOMStringMap. Cela n'a pas de limites inhérentes.

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

Remarque: La définition de l'interface DOMStringMap ici est uniquement destinée aux environnements JavaScript. D'autres liaisons de langage devront définir comment DOMStringMap doit être implémenté pour ces langues

DOMStringMap est une interface avec un getter, setter, greator et deleter. Le setter a deux paramètres de type DOMString, nom et valeur. La valeur est de type DOMString qui est mappée directement à une chaîne JavaScript.

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

La longueur maximale d'une chaîne JavaScript est spécifique à l'implémentation.

[note: chrome signale bytes.com comme une source de malware donc méfiez-vous]

Luis Filipe
la source
0

Le SGML définit les attributs avec un ensemble limité de 65 000 caractères, voir ici: http://www.highdots.com/forums/html/length-html-attribute-175546.html

Bien que pour ce que vous faites, ça devrait aller. En ce qui concerne les limites supérieures, j'ai vu que jQuery utilise des attributs de données contenant également quelques k de données personnellement.

SuperRoach
la source
5
HTML5 n'est pas un langage basé sur SGML.
William Brendel
0

Testé récemment dans Edge (version 81.0.416.58 (64 bits)), et les attributs de données semblent avoir une limite de 64 Ko.

Peter Waher
la source