¿Existe un límite en la longitud de los atributos HTML?


213

¿Cuánto tiempo es demasiado largo para un valor de atributo en HTML?

Estoy usando atributos de datos de estilo HTML5 ( data-foo="bar") en una nueva aplicación, y en un lugar sería realmente útil almacenar una buena cantidad de datos (más de 100 caracteres). Si bien sospecho que esta cantidad está bien, plantea la pregunta de cuánto es demasiado.


1
Para información, otro atributo que se espera que sea muy largo es iframe@srcdoc( MDN (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) - [HTML5.2 que contiene un documento completo ( Escuché que te gustaban los documentos, así que (... )
FelipeAls

Respuestas:


265

HTML 4

Desde una perspectiva HTML 4, los atributos son una construcción SGML. Sus límites están definidos en la Declaración SGML de HTML 4 :

         CANTIDAD SGMLREF
                  ATTCNT 60 - aumentado -
                  ATTSPLEN 65536 - Estos son los valores más grandes -
                  LITLEN 65536 - permitido en la declaración -
                  NAMELEN 65536 - Evite límites fijos en real -
                  PILEN 65536 - implementaciones de HTML UA's -
                  TAGLVL 100
                  TAGLEN 65536
                  GRPGTCNT 150
                  GRPCNT 64

El valor en cuestión aquí es "ATTSPLEN", que sería el límite en la lista de especificaciones de atributos de un elemento (que debería ser el tamaño total de todos los atributos para ese elemento). Sin embargo, la nota anterior menciona que deben evitarse los límites fijos, por lo que es probable que no haya un límite real que no sea la memoria disponible en la mayoría de las implementaciones.

HTML 5

HTML 5 parece ser diferente, como dice la especificación : "Esta versión de HTML vuelve así a una base no SGML".

Más adelante, al describir cómo analizar HTML 5, aparece el siguiente pasaje ( énfasis agregado):

El algoritmo descrito a continuación no establece límites en la profundidad del árbol DOM generado, o en la longitud de los nombres de etiquetas, nombres de atributos , valores de atributos , nodos de texto, etc. Si bien se alienta a los implementadores a evitar límites arbitrarios, se reconoce que las preocupaciones prácticas probablemente obligará a los agentes de usuario a imponer restricciones de profundidad de anidamiento.

Así que supongo que esa es tu respuesta.


25
Entonces, ¿la respuesta debería ser "ilimitada"?
Anders Lindén

1
¡Gracias! Aunque no puedo votar, esta respuesta sería maravillosa si estuviera precedida por algo como "los atributos HTML teóricamente no tienen límite de tamaño". Eso es mucha lectura solo para obtener una respuesta tan simple.
rinogo

144

Acabo de escribir una prueba que pone una cadena de longitud de 10 millones en un atributo y luego la recupera nuevamente, y funciona bien (Firefox 3.5.2 e Internet Explorer 7)

50 millones hacen que el navegador se cuelgue con el mensaje "Este script está tardando mucho en completarse".


44
10 millones son una gran cantidad de datos.
rahul

3
Acabo de editar ese script para establecer el tamaño en 50 millones y funcionó, pero configurarlo en 100 millones eliminó la pestaña en Chrome antes de que incluso tuviera la oportunidad de probarlo. : P
cHao

44
@nickf: Está prácticamente limitado (por ejemplo, por memoria) pero teóricamente ilimitado;)
Tim Schmelter

sin memoria se estrelló
holmium

Gracias por llegar directamente a los productos. Si quisiera leer la especificación SGML, ¡buscaría la especificación SGML!
rinogo

5

Realmente no creo que haya ningún límite. Ahora se que puedes hacer

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

y funciona bien Aunque un poco ilegible.


25
Un poco. -----
Paul Draper

4

De la sintaxis HTML5 doc

9.1.2.3 Atributos

Los atributos de un elemento se expresan dentro de la etiqueta de inicio del elemento.

Los atributos tienen un nombre y un valor. Los nombres de los atributos deben constar de uno o más caracteres distintos de los caracteres de espacio, U + 0000 NULL, U + 0022 QUOTATION MARK ("), U + 0027 APOSTROPHE ('), U + 003E GREATER-THAN SIGN (>), U + 002F SOLIDUS (/), y U + 003D EQUALS SIGN (=) caracteres, los caracteres de control y cualquier carácter que no esté definido por Unicode. En la sintaxis HTML, los nombres de atributos pueden escribirse con cualquier combinación de letras minúsculas y mayúsculas que coinciden con mayúsculas y minúsculas ASCII para el nombre del atributo.

Los valores de los atributos son una mezcla de referencias de texto y caracteres, excepto con la restricción adicional de que el texto no puede contener un ampersand ambiguo.

Los atributos se pueden especificar de cuatro maneras diferentes:

  1. Sintaxis de atributo vacío

  2. Sintaxis de valor de atributo sin comillas

  3. Sintaxis de valor de atributo entre comillas simples

  4. Sintaxis de valor de atributo entre comillas dobles

Aquí no se ha mencionado un límite en el tamaño del valor del atributo. Así que creo que no debería haber ninguno.

También puede validar su documento contra el

Validador HTML5 (Altamente experimental)


1

Nunca he oído hablar de ningún límite en la longitud de los atributos.

En las especificaciones HTML 4.01, en la sección de Atributos no hay nada que mencione ninguna limitación al respecto.

Lo mismo en el HTML 4.01 DTD ; de hecho, hasta donde yo sé, DTD no le permite especificar una longitud para los atributos.

Si no hay nada de eso en HTML 4, no imagino que algo así aparezca para HTML 5, y en realidad tampoco veo ninguna limitación de longitud en la sección de Atributos 9.1.2.3 para HTML 5.


1

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

Cada elemento HTML puede tener cualquier número de atributos de datos personalizados especificados, con cualquier valor.

Lo que se usa para analizar / procesar estos valores de atributo data- * tendrá limitaciones.

Resulta que los atributos de datos y los valores se colocan en un objeto DOMStringMap. Esto no tiene límites inherentes.

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

Nota: La definición de interfaz DOMStringMap aquí solo está destinada a entornos JavaScript. Otros enlaces de idiomas deberán definir cómo se implementará DOMStringMap para esos idiomas

DOMStringMap es una interfaz con getter, setter, greator y deleter. El setter tiene dos parámetros de tipo DOMString, nombre y valor. El valor es de tipo DOMString que se asigna directamente a una cadena de JavaScript.

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

La longitud máxima de una cadena de JavaScript es específica de la implementación.

[nota: Chrome informa que bytes.com es una fuente de malware, así que ten cuidado]



0

Probado recientemente en Edge (Versión 81.0.416.58 (64 bits)), y los atributos de datos parecen tener un límite de 64k.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.