มีการจำกัดความยาวของแอตทริบิวต์ HTML หรือไม่


213

นานเท่าไหร่สำหรับค่าคุณลักษณะใน HTML?

ฉันกำลังใช้แอตทริบิวต์ข้อมูลสไตล์ HTML5 ( data-foo="bar") ในแอปพลิเคชันใหม่และในที่เดียวมันจะมีประโยชน์มากในการจัดเก็บข้อมูลที่ยุติธรรม (มากกว่า 100 ตัวอักษร) ในขณะที่ฉันสงสัยว่าจำนวนนี้ใช้ได้ แต่คำถามนี้ทำให้เกิดคำถามมากเกินไป


1
สำหรับข้อมูลแอตทริบิวต์อื่นที่คาดว่าจะมีความยาวมากคือiframe@srcdoc( MDN (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) - [HTML5.2ซึ่งมีเอกสารทั้งหมด ( ฉันได้ยินมาว่าคุณชอบเอกสารดังนั้น (…) )
FelipeAls

คำตอบ:


265

HTML 4

จากมุมมอง HTML 4 แอตทริบิวต์เป็นโครงสร้าง SGML ขีด จำกัด ของพวกเขาถูกกำหนดในการประกาศ SGML ของ HTML 4 :

         SGMLREF QUANTITY
                  ATTCNT 60 - เพิ่มขึ้น -
                  ATTSPLEN 65536 - นี่คือค่าที่ใหญ่ที่สุด -
                  LITLEN 65536 - อนุญาตในการประกาศ -
                  NAMELEN 65536 - หลีกเลี่ยงการ จำกัด ตามจริง -
                  PILEN 65536 - การใช้งาน HTML UA's -
                  TAGLVL 100
                  TAGLEN 65536
                  GRPGTCNT 150
                  GRPCNT 64

ค่าที่เป็นปัญหาในที่นี้คือ "ATTSPLEN" ซึ่งจะเป็นข้อ จำกัด ในรายการข้อกำหนดคุณลักษณะขององค์ประกอบ (ซึ่งควรเป็นขนาดรวมของคุณลักษณะทั้งหมดสำหรับองค์ประกอบนั้น) หมายเหตุข้างต้นกล่าวถึงว่าควรหลีกเลี่ยงการ จำกัด คงที่ดังนั้นอาจเป็นไปได้ว่าไม่มีการ จำกัด จริงนอกเหนือจากหน่วยความจำที่มีอยู่ในการนำไปใช้งานส่วนใหญ่

HTML 5

HTML 5 ดูเหมือนจะแตกต่างกันไปตามที่ระบุไว้ว่า "HTML เวอร์ชันนี้จะกลับไปเป็นพื้นฐานที่ไม่ใช่ SGML"

ในภายหลังเมื่ออธิบายวิธีแยก HTML 5 ข้อความต่อไปนี้จะปรากฏขึ้น ( เน้นการเน้น ):

อัลกอริธึมที่อธิบายไว้ด้านล่างนี้ ไม่จำกัดความลึกของทรี DOM ที่สร้างขึ้นหรือความยาวของชื่อแท็กชื่อแอตทริบิวต์ค่าแอตทริบิวต์โหนดข้อความ ฯลฯ ขณะที่ผู้พัฒนาระบบได้รับการสนับสนุนเพื่อหลีกเลี่ยงข้อ จำกัด โดยพลการ จะบังคับให้ตัวแทนผู้ใช้กำหนดข้อ จำกัด เชิงลึกของการซ้อน

ดังนั้นฉันคิดว่านั่นคือคำตอบของคุณ


25
ดังนั้นคำตอบควร "ไม่ จำกัด " แล้ว?
Anders Lindén

1
ขอบคุณ! แม้ว่าฉันจะไม่สามารถโหวตได้ - คำตอบนี้จะยอดเยี่ยมถ้ามันถูกนำหน้าด้วยบางสิ่งเช่น "แอตทริบิวต์ HTML ในทางทฤษฎีไม่มีการ จำกัด ขนาด" นั่นเป็นจำนวนมากของการอ่านเพียงเพื่อให้หายไปด้วยคำตอบง่ายๆ
rinogo

144

ฉันเพิ่งเขียนการทดสอบซึ่งใส่สตริงความยาว10 ล้านลงในแอตทริบิวต์แล้วดึงข้อมูลอีกครั้งและใช้งานได้ดี (Firefox 3.5.2 และ Internet Explorer 7)

50 ล้านทำให้เบราว์เซอร์หยุดทำงานกับข้อความ "สคริปต์นี้ใช้เวลานานในการทำให้เสร็จ"


4
10 ล้านเป็นข้อมูลจำนวนมหาศาล
ราหุล

3
ฉันเพิ่งแก้ไขสคริปต์เพื่อกำหนดขนาดเป็น 50 ล้านและใช้งานได้ แต่ตั้งค่าเป็น 100 ล้านแท็บที่ฆ่าใน Chrome ก่อนที่ฉันจะมีโอกาสทดสอบ : P
cHao

4
@nickf: มีข้อ จำกัด ในทางปฏิบัติ (เช่นโดยหน่วยความจำ) แต่ไม่ จำกัด ตามหลักวิชา;)
Tim Schmelter

หน่วยความจำของชน
โฮลเมียม

ขอบคุณที่ส่งตรงไปยังสินค้า ถ้าฉันต้องการอ่านข้อมูลจำเพาะ SGML ฉันจะค้นหาข้อมูลจำเพาะ SGML!
rinogo

6

ฉันไม่คิดว่าจะมีข้อ จำกัด ใด ๆ ฉันรู้ว่าตอนนี้คุณสามารถทำได้

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

และมันใช้งานได้ดี แม้ว่าจะอ่านไม่ออก


27
เล็กน้อย. -----
Paul Draper

4

จากเอกสารไวยากรณ์ HTML5

9.1.2.3 คุณสมบัติ

แอตทริบิวต์สำหรับองค์ประกอบจะแสดงอยู่ภายในแท็กเริ่มต้นขององค์ประกอบ

คุณสมบัติมีชื่อและค่า ชื่อแอตทริบิวต์ต้องประกอบด้วยอักขระอย่างน้อยหนึ่งอักขระนอกเหนือจากอักขระเว้นวรรค U + 0000 NULL, เครื่องหมายเครื่องหมายอัญประกาศ U + 0022, "U + 0027 APOSTROPHE ('), U + 003E เครื่องหมายยิ่งใหญ่กว่า (>), U + 002F SOLIDUS (/) และ U + 003D EQUALS SIGN (=) อักขระตัวควบคุมและอักขระใด ๆ ที่ไม่ได้กำหนดโดย Unicode ในไวยากรณ์ HTML ชื่อแอตทริบิวต์อาจถูกเขียนด้วยตัวอักษรตัวพิมพ์เล็กและใหญ่ นั่นคือการจับคู่ case-insensitive ASCII สำหรับชื่อของแอ็ตทริบิวต์

ค่าแอตทริบิวต์เป็นส่วนผสมของการอ้างอิงข้อความและตัวอักษรยกเว้นข้อ จำกัด เพิ่มเติมที่ข้อความไม่สามารถมีเครื่องหมายแอมเปอร์แซนด์คลุมเครือ

คุณสมบัติสามารถระบุได้สี่วิธี:

  1. ไวยากรณ์ของแอตทริบิวต์ที่ว่างเปล่า

  2. ไวยากรณ์ค่าแอตทริบิวต์ที่ไม่ได้กล่าวถึง

  3. ไวยากรณ์ค่าแอตทริบิวต์ที่เสนอราคาเดี่ยว

  4. ไวยากรณ์ของค่าแอ็ตทริบิวต์ที่มีเครื่องหมายคำพูดคู่

ที่นี่ไม่มีการกล่าวถึงข้อ จำกัด เกี่ยวกับขนาดของค่าแอตทริบิวต์ ดังนั้นฉันคิดว่าไม่ควรมี

คุณสามารถตรวจสอบเอกสารของคุณกับ

เครื่องมือตรวจสอบ HTML5 (ทดลองสูง)


1

ฉันไม่เคยได้ยินข้อ จำกัด เกี่ยวกับความยาวของคุณลักษณะ

ในข้อกำหนดของ HTML 4.01 ในส่วนของแอตทริบิวต์ไม่มีสิ่งใดที่กล่าวถึงข้อ จำกัด นี้

เหมือนกันในHTML 4.01 DTDอันที่จริงเท่าที่ฉันรู้ DTD ไม่อนุญาตให้คุณระบุความยาวของแอตทริบิวต์

หากไม่มีอะไรเกี่ยวกับเรื่องนั้นใน HTML 4 ฉันไม่คิดว่าจะเป็นเช่นนั้นสำหรับ HTML 5 - และจริง ๆ แล้วฉันไม่เห็นข้อจำกัดความยาวในส่วน9.1.2.3 แอตทริบิวต์ของ HTML 5


1

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

องค์ประกอบ HTML ทุกรายการอาจมีแอตทริบิวต์ข้อมูลแบบกำหนดเองที่ระบุไว้จำนวนเท่าใดก็ได้โดยมีค่าใด ๆ

สิ่งที่ใช้ในการแยก / ประมวลผลค่า data- * attribute เหล่านี้จะมีข้อ จำกัด

ปรากฎว่า data-attributes และ values ​​ถูกวางไว้ในวัตถุ DOMStringMap สิ่งนี้ไม่มีข้อ จำกัด โดยธรรมชาติ

จากhttp://dev.w3.org/html5/spec/Overview.html#domstringmap :

หมายเหตุ: นิยามอินเตอร์เฟส DOMStringMap ที่นี่มีไว้สำหรับสภาพแวดล้อม JavaScript เท่านั้น การเชื่อมภาษาอื่น ๆ จะต้องกำหนดวิธีที่ DOMStringMap จะนำไปใช้กับภาษาเหล่านั้น

DOMStringMap เป็นอินเตอร์เฟสที่มี getter, setter, greator และ deleter setter มีพารามิเตอร์สองชนิดคือ DOMString ชื่อและค่า ค่าเป็นประเภท DOMString ที่ถูกแมปโดยตรงกับสตริง JavaScript

จาก http://bytes.com/topic/javascript/answers/92088-max-allowed-length-javascript-string:

ความยาวสูงสุดของสตริง JavaScript มีการใช้งานเฉพาะ

[หมายเหตุ: chrome กำลังรายงาน bytes.com ว่าเป็นแหล่งที่มาของมัลแวร์ดังนั้นระวัง]


0

SGML กำหนดแอตทริบิวต์ด้วยชุดขีด จำกัด จำนวน 65k charecters ที่นี่: http://www.highdots.com/forums/html/length-html-attribute-175546.html

แม้ว่าสิ่งที่คุณกำลังทำคุณควรจะดี สำหรับข้อ จำกัด ด้านบนฉันได้เห็น jQuery data data attribute เก็บไว้เป็นข้อมูลส่วนตัวไม่กี่ k เช่นกัน


5
HTML5 ไม่ใช่ภาษาที่ใช้ SGML
William Brendel

0

ทดสอบเมื่อเร็ว ๆ นี้ใน Edge (เวอร์ชั่น 81.0.416.58 (64 บิต)) และข้อมูลแอตทริบิวต์ดูเหมือนว่าจะมีขีด จำกัด 64k

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.