web-dev-qa-db-fra.com

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

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 à un endroit donné, il serait très pratique de stocker une quantité raisonnable de données (plus de 100 caractères). Bien que je soupçonne que ce montant est correct, cela soulève la question de savoir combien est trop.

204
nickf

HTML 4

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

 QUANTITÉ SGMLREF 
 ATTCNT 60 - augmenté - 
 ATTSPLEN 65536 - Il s’agit des plus grandes valeurs - 
 LITLEN 65536 - autorisées dans la déclaration - 
 NAMELEN 65536 - Évitez les limites fixes dans - 
 PILEN 65536 - implémentations d'AU HTML - 
 TAGLVL 100 
 TAGLEN 65536 
 GRPGTCNT 150 
 GRPCNT 64 

La valeur en question ici est "ATTSPLEN", qui constituerait la limite de la liste de spécification d'attributs d'un élément (qui devrait être la taille totale de tous les attributs de cet élément). La note ci-dessus mentionne que les limites fixes doivent être évitées, cependant, 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, car la spécification dit: "Cette version de HTML revient donc à une base non SGML."

Plus tard, lors de la description de l'analyse de HTML 5, le passage suivant apparaît ( italiques ajoutés):

L’algorithme décrit ci-dessous ne place aucune limite sur la profondeur de l’arbre DOM généré, ou sur la longueur de noms de balises, noms d'attributs, valeurs d'attributs , noeuds de texte, etc. Alors que les implémenteurs sont encouragés à éviter les limites arbitraires, c'est a reconnu que les préoccupations pratiques forceraient probablement les agents utilisateurs à imposer des contraintes de profondeur d'imbrication.

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

249
bobbymcr

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

50 millions d'utilisateurs bloquent le navigateur avec le message "Le script prend beaucoup de temps".

135
nickf

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

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

et ça marche bien. Bien qu'un peu illisible.

3
priestc

De doc 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 comporter un ou plusieurs caractères autres que les espaces, U + 0000 NULL, U + 0022 SIGNE DE COTATION ("), U + 0027 APOSTROPHE ('), U + 003E SIGNE SUPERIEUR (>), U + 002F SOLIDUS (/) et U + 003D SIGNES EQUALS (=), les caractères de contrôle et tous les caractères non définis par Unicode Dans la syntaxe HTML, les noms d'attribut peuvent être écrits avec n'importe quelle combinaison 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 texte et de références de caractères, sauf que le texte ne peut pas contenir d'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 entre guillemets

  3. Syntaxe de valeur d'attribut entre guillemets

  4. Syntaxe de valeur d'attribut entre guillemets

Ici, il n’est pas fait mention d’une limite sur la taille de la valeur de l’attribut. Donc, je pense qu'il ne devrait pas y en avoir.

Vous pouvez également valider votre document par rapport au

Validateur HTML5 (hautement expérimental)

3
rahul

Je n'ai jamais entendu parler d'une limite à la longueur des attributs.

Dans les spécifications HTML 4.01, dans le section sur les 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 aux attributs.

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

1
Pascal MARTIN

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

Chaque élément HTML peut avoir n'importe quel nombre 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'attributs 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.

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

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

DOMStringMap est une interface avec un getter, un setter, un greator et un deleter. Le poseur a deux paramètres de type DOMString, name et value. La valeur est de type DOMString et correspond 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 à la mise en œuvre.

[note: chrome rapporte bytes.com en tant que source de malwares, alors méfiez-vous]

1
user78706

Le SGML définit les attributs avec un ensemble limite de caractères 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 les attributs de données d’utilisation de jQuery contiennent également personnellement quelques k de données.

0
SuperRoach