Apakah ada batasan untuk panjang atribut HTML?

213

Berapa lama terlalu lama untuk nilai atribut dalam HTML?

Saya menggunakan atribut data gaya HTML5 ( data-foo="bar") dalam aplikasi baru, dan di satu tempat akan sangat berguna untuk menyimpan data yang adil (lebih dari 100 karakter). Sementara saya menduga bahwa jumlah ini baik-baik saja, itu menimbulkan pertanyaan tentang berapa banyak yang terlalu banyak?

nickf
sumber
1
Sebagai informasi, satu atribut lain yang diharapkan sangat panjang adalah iframe@srcdoc( MDN (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) - [HTML5.2 yang berisi seluruh dokumen ( Saya mendengar Anda menyukai dokumen jadi (...) )
FelipeAls

Jawaban:

265

HTML 4

Dari perspektif HTML 4, atribut adalah konstruk SGML. Batasnya ditentukan dalam Deklarasi SGML untuk HTML 4 :

         QUANTITY SGMLREF
                  ATTCNT 60 - meningkat -
                  ATTSPLEN 65536 - Ini adalah nilai terbesar -
                  LITLEN 65536 - diizinkan dalam deklarasi -
                  NAMELEN 65536 - Hindari batas tetap aktual -
                  PILEN 65536 - implementasi HTML UA's -
                  TAGLVL 100
                  TAGLEN 65536
                  GRPGTCNT 150
                  GRPCNT 64

Nilai yang dipermasalahkan di sini adalah "ATTSPLEN" yang akan menjadi batas pada daftar spesifikasi atribut elemen (yang harus menjadi ukuran total semua atribut untuk elemen itu). Catatan di atas menyebutkan bahwa batas tetap harus dihindari, sehingga kemungkinan tidak ada batas nyata selain memori yang tersedia di sebagian besar implementasi.

HTML 5

HTML 5 tampaknya berbeda, seperti yang dinyatakan oleh spek , "Versi HTML ini kemudian kembali ke basis non-SGML."

Kemudian, ketika menjelaskan cara mem-parsing HTML 5, bagian berikut ini muncul ( penekanan ditambahkan):

Algoritme yang dijelaskan di bawah ini tidak membatasi pada kedalaman pohon DOM yang dihasilkan, atau pada panjang nama tag, nama atribut , nilai atribut , node teks, dll. Sementara pelaksana didorong untuk menghindari batas sewenang-wenang, diakui bahwa masalah praktis kemungkinan akan memaksa agen pengguna untuk memaksakan kendala kedalaman bersarang.

Jadi saya kira itu jawaban Anda.

bobbymcr
sumber
25
Jadi jawabannya harus "tidak terbatas"?
Anders Lindén
1
Terima kasih! Meskipun saya tidak dapat memilih - jawaban ini akan luar biasa jika diawali dengan sesuatu seperti, "Atribut HTML secara teoritis tidak memiliki batas ukuran." Itu banyak bacaan hanya untuk pergi dengan jawaban yang begitu sederhana.
rinogo
144

Saya baru saja menulis tes yang menempatkan string dengan panjang 10 juta ke dalam atribut dan kemudian mengambilnya lagi, dan berfungsi dengan baik (Firefox 3.5.2 & Internet Explorer 7)

50 juta membuat browser hang dengan pesan "Script ini butuh waktu lama untuk menyelesaikan".

nickf
sumber
4
10 juta adalah jumlah data yang sangat besar.
rahul
3
Saya baru saja mengedit skrip itu untuk mengatur ukuran menjadi 50 juta dan berhasil, tetapi mengaturnya menjadi 100 juta membunuh tab di Chrome sebelum saya bahkan sempat mengujinya. : P
cHao
4
@nickf: Secara praktis terbatas (mis. oleh memori) tetapi secara teori tidak terbatas;)
Tim Schmelter
kehabisan memori jatuh
holmium
Terima kasih untuk langsung ke barang. Jika saya ingin membaca spec SGML, saya akan mencari spec SGML!
rinogo
6

Saya benar-benar tidak berpikir ada batasan. Saya tahu sekarang Anda bisa melakukannya

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

dan itu bekerja dengan baik. Meskipun sedikit tidak terbaca.

pendeta
sumber
27
Sedikit. -----
Paul Draper
4

Dari sintaks HTML5 doc

9.1.2.3 Atribut

Atribut untuk suatu elemen diekspresikan di dalam tag awal elemen.

Atribut memiliki nama dan nilai. Nama atribut harus terdiri dari satu atau lebih karakter selain karakter spasi, U + 0000 NULL, U + 0022 MARK QUOTATION ("), U + 0027 APOSTROPHE ('), U + 003E GREATER-THAN SIGN (>), U + 002F SOLIDUS (/), dan U + 003D EQUALS SIGN (=) karakter, karakter kontrol, dan karakter apa pun yang tidak didefinisikan oleh Unicode. Dalam sintaks HTML, nama atribut dapat ditulis dengan campuran huruf kecil dan besar yang merupakan kecocokan tidak sensitif huruf ASCII untuk nama atribut.

Nilai atribut adalah campuran dari referensi teks dan karakter, kecuali dengan batasan tambahan bahwa teks tidak dapat berisi tanda ganda yang ambigu.

Atribut dapat ditentukan dalam empat cara berbeda:

  1. Sintaks atribut kosong

  2. Sintaks nilai atribut yang tidak dikutip

  3. Sintaks nilai atribut yang dikutip tunggal

  4. Sintaks nilai atribut yang dikutip ganda

Di sini belum disebutkan batas ukuran nilai atribut. Jadi saya pikir seharusnya tidak ada.

Anda juga dapat memvalidasi dokumen Anda terhadap

HTML5 Validator (Sangat Eksperimental)

rahul
sumber
1

Saya belum pernah mendengar adanya batasan pada panjang atribut.

Dalam spesifikasi HTML 4.01, di bagian Atribut tidak ada yang menyebutkan batasan tentang ini.

Sama di HTML 4.01 DTD - pada kenyataannya, sejauh yang saya tahu, DTD tidak memungkinkan Anda untuk menentukan panjang atribut.

Jika tidak ada tentang itu di HTML 4, saya tidak membayangkan hal seperti itu akan muncul untuk HTML 5 - dan saya sebenarnya tidak melihat batasan panjang di bagian 9.1.2.3 Atribut untuk HTML 5 juga.

Pascal MARTIN
sumber
1

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

Setiap elemen HTML dapat memiliki sejumlah atribut data khusus yang ditentukan, dengan nilai berapa pun.

Apa yang digunakan untuk mem-parsing / memproses nilai atribut data- * ini akan memiliki keterbatasan.

Ternyata data-atribut dan nilai ditempatkan di objek DOMStringMap. Ini tidak memiliki batas bawaan.

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

Catatan: Definisi antarmuka DOMStringMap di sini hanya ditujukan untuk lingkungan JavaScript. Binding bahasa lain perlu mendefinisikan bagaimana DOMStringMap akan diimplementasikan untuk bahasa-bahasa tersebut

DOMStringMap adalah antarmuka dengan pengambil, penyetel, hebat dan deleter. Setter memiliki dua parameter tipe DOMString, nama dan nilai. Nilainya adalah tipe DOMString yang dipetakan langsung ke JavaScript String.

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

Panjang maksimum String JavaScript khusus untuk implementasi.

[note: chrome melaporkan bytes.com sebagai sumber malware, jadi berhati-hatilah]

Luis Filipe
sumber
0

SGML Mendefinisikan atribut dengan batas set 65 ribu karakter, terlihat di sini: http://www.highdots.com/forums/html/length-html-attribute-175546.html

Meskipun untuk apa yang Anda lakukan, Anda harus baik-baik saja. Adapun batas atas, saya telah melihat atribut data jQuery menggunakan beberapa k data pribadi juga.

SuperRoach
sumber
5
HTML5 bukan bahasa berbasis SGML.
William Brendel
0

Diuji baru-baru ini di Edge (Versi 81.0.416.58 (64 bit)), dan atribut-data tampaknya memiliki batas 64k.

Peter Waher
sumber