Esiste un limite alla lunghezza degli attributi HTML?


213

Quanto tempo è troppo lungo per un valore di attributo in HTML?

Sto usando attributi di dati in stile HTML5 ( data-foo="bar") in una nuova applicazione, e in un posto sarebbe davvero utile archiviare una discreta quantità di dati (fino a 100 caratteri). Mentre sospetto che questo importo vada bene, solleva la questione di quanto sia troppo?


1
Per informazione, un altro attributo che dovrebbe essere molto lungo è iframe@srcdoc( MDN (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) - [HTML5.2 che contiene un intero documento ( Ho sentito che ti sono piaciuti i documenti, quindi (...) )
FelipeAls

Risposte:


265

HTML 4

Dal punto di vista HTML 4, gli attributi sono un costrutto SGML. I loro limiti sono definiti nella Dichiarazione SGML di HTML 4 :

         QUANTITÀ SGMLREF
                  ATTCNT 60 - aumentato -
                  ATTSPLEN 65536 - Questi sono i valori più grandi -
                  LITLEN 65536 - consentito nella dichiarazione -
                  NAMELEN 65536 - Evita i limiti fissi in realtà -
                  PILEN 65536 - implementazioni di HTML UA -
                  TAGLVL 100
                  TAGLEN 65536
                  GRPGTCNT 150
                  GRPCNT 64

Il valore in questione qui è "ATTSPLEN" che sarebbe il limite dell'elenco delle specifiche degli attributi di un elemento (che dovrebbe essere la dimensione totale di tutti gli attributi per quell'elemento). La nota sopra menziona che i limiti fissi dovrebbero essere evitati, tuttavia, quindi è probabile che non ci siano limiti reali oltre alla memoria disponibile nella maggior parte delle implementazioni.

HTML 5

HTML 5 sembra essere diverso, come dice la specifica , "Questa versione di HTML ritorna quindi su una base non SGML".

Successivamente, quando si descrive come analizzare HTML 5, appare il seguente passaggio ( enfasi aggiunta):

L'algoritmo descritto di seguito non pone limiti alla profondità dell'albero DOM generato, né alla lunghezza dei nomi dei tag, dei nomi degli attributi , dei valori degli attributi , dei nodi di testo, ecc. Mentre gli implementatori sono incoraggiati a evitare limiti arbitrari, si riconosce che le preoccupazioni pratiche costringerà probabilmente gli user agent a imporre vincoli di profondità di annidamento.

Quindi suppongo che sia la tua risposta.


25
Quindi la risposta dovrebbe essere "illimitata" allora?
Anders Lindén, l'

1
Grazie! Anche se non posso votare: questa risposta sarebbe meravigliosa se fosse preceduta da qualcosa del tipo, "teoricamente gli attributi HTML non hanno limiti di dimensione". Sono molte letture solo per venire via con una risposta così semplice.
Rinogo,

144

Ho appena scritto un test che inserisce una stringa di lunghezza 10 milioni in un attributo e poi lo recupera di nuovo, e funziona benissimo (Firefox 3.5.2 e Internet Explorer 7)

50 milioni bloccano il browser con il messaggio "Questo script richiede molto tempo per essere completato".


4
10 milioni sono un'enorme quantità di dati.
rahul,

3
Ho appena modificato lo script per impostare la dimensione su 50 milioni e ha funzionato, ma impostandolo su 100 milioni ho ucciso la scheda in Chrome prima ancora che avessi la possibilità di testarlo. : P
cHao,

4
@nickf: è praticamente limitato (ad es. dalla memoria) ma teoricamente illimitato;)
Tim Schmelter

la memoria si è schiantata
olmio il

Grazie per essere arrivato direttamente alla merce. Se volessi leggere le specifiche SGML, cercare le specifiche SGML!
Rinogo,

6

Non penso davvero che ci siano limiti. Ora so che puoi fare

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

e funziona benissimo. Anche se un po 'illeggibile.


27
Un po. -----
Paul Draper,

4

Dal documento di sintassi HTML5

9.1.2.3 Attributi

Gli attributi di un elemento sono espressi all'interno del tag iniziale dell'elemento.

Gli attributi hanno un nome e un valore. I nomi degli attributi devono essere costituiti da uno o più caratteri diversi dai caratteri spazio, U + 0000 NULL, U + 0022 QUOTATION MARK ("), U + 0027 APOSTROPHE ('), U + 003E GREATER-THAN SIGN (>), U + 002F SOLIDUS (/) e U + 003D EQUALS SIGN (=) caratteri, i caratteri di controllo e tutti i caratteri che non sono definiti da Unicode. Nella sintassi HTML, i nomi degli attributi possono essere scritti con qualsiasi combinazione di lettere minuscole e maiuscole che sono una corrispondenza ASCII senza distinzione tra maiuscole e minuscole per il nome dell'attributo.

I valori degli attributi sono una combinazione di riferimenti di testo e caratteri, tranne con l'ulteriore limitazione che il testo non può contenere una e commerciale ambigua.

Gli attributi possono essere specificati in quattro modi diversi:

  1. Sintassi dell'attributo vuota

  2. Sintassi del valore dell'attributo non quotato

  3. Sintassi del valore dell'attributo a virgoletta singola

  4. Sintassi del valore dell'attributo tra virgolette

Qui non è stato menzionato un limite alla dimensione del valore dell'attributo. Quindi penso che non dovrebbe essercene nessuno.

È inoltre possibile convalidare il documento con il

Convalida HTML5 (altamente sperimentale)


1

Non ho mai sentito parlare di limiti alla lunghezza degli attributi.

Nelle specifiche HTML 4.01, nella sezione Attributi non c'è nulla che menzioni alcuna limitazione al riguardo.

Lo stesso nel DTD HTML 4.01 - in effetti, per quanto ne so, DTD non consente di specificare una lunghezza per gli attributi.

Se in HTML 4 non c'è nulla di simile, non immagino che nulla di simile possa apparire per HTML 5 - e in realtà non vedo alcuna limitazione di lunghezza nella sezione Attributi 9.1.2.3 per HTML 5.


1

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

Ogni elemento HTML può avere un numero qualsiasi di attributi di dati personalizzati specificati, con qualsiasi valore.

Ciò che viene utilizzato per analizzare / elaborare questi valori dell'attributo data- * avrà limitazioni.

Risulta che gli attributi e i valori dei dati sono collocati in un oggetto DOMStringMap. Questo non ha limiti intrinseci.

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

Nota: la definizione dell'interfaccia DOMStringMap qui è intesa solo per ambienti JavaScript. Altre associazioni linguistiche dovranno definire le modalità di implementazione di DOMStringMap per tali lingue

DOMStringMap è un'interfaccia con getter, setter, greator e deleter. Il setter ha due parametri di tipo DOMString, nome e valore. Il valore è di tipo DOMString mappato direttamente su una stringa JavaScript.

A partire dal http://bytes.com/topic/javascript/answers/92088-max-allowed-length-javascript-string:

La lunghezza massima di una stringa JavaScript è specifica dell'implementazione.

[nota: Chrome sta segnalando bytes.com come una fonte di malware, quindi fai attenzione]



0

Testato di recente in Edge (versione 81.0.416.58 (64 bit)) e gli attributi dei dati sembrano avere un limite di 64k.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.