Có giới hạn về độ dài của các thuộc tính HTML không?


213

Bao lâu là quá dài cho một giá trị thuộc tính trong HTML?

Tôi đang sử dụng các thuộc tính dữ liệu kiểu HTML5 ( data-foo="bar") trong một ứng dụng mới và ở một nơi sẽ thực sự tiện dụng để lưu trữ một lượng dữ liệu hợp lý (tối đa 100 ký tự). Trong khi tôi nghi ngờ rằng số tiền này là tốt, nó đặt ra câu hỏi bao nhiêu là quá nhiều?


1
Để biết thông tin, một thuộc tính khác dự kiến ​​sẽ rất dài là iframe@srcdoc( MDN (https://developer.mozilla.org/en-US/docs/Web/HTML/Euity/iframe) - [HTML5.2 chứa toàn bộ tài liệu ( Tôi nghe nói bạn thích tài liệu nên (Ngày) )
FelipeAls

Câu trả lời:


265

HTML 4

Từ phối cảnh HTML 4, các thuộc tính là một cấu trúc SGML. Các giới hạn của chúng được định nghĩa trong Tuyên bố SGML của HTML 4 :

         SỐ LƯỢNG SGMLREF
                  ATTCNT 60 - tăng -
                  ATTSPLEN 65536 - Đây là những giá trị lớn nhất -
                  LITLEN 65536 - được phép trong tờ khai -
                  NAMELEN 65536 - Tránh các giới hạn cố định trong thực tế -
                  PILEN 65536 - triển khai HTML UA -
                  TAGLVL 100
                  TAGLEN 65536
                  GRPGTCNT 150
                  GRPCNT 64

Giá trị trong câu hỏi ở đây là "ATTSPLEN" sẽ là giới hạn trong danh sách đặc tả thuộc tính của một thành phần (phải là tổng kích thước của tất cả các thuộc tính cho thành phần đó). Tuy nhiên, lưu ý ở trên đề cập rằng nên tránh các giới hạn cố định, do đó, có khả năng là không có giới hạn thực nào ngoài bộ nhớ khả dụng trong hầu hết các triển khai.

HTML 5

HTML 5 dường như khác biệt, như thông số kỹ thuật nói, "Phiên bản HTML này do đó trở về cơ sở không phải SGML."

Sau này, khi mô tả cách phân tích HTML 5, đoạn văn sau xuất hiện ( nhấn mạnh thêm):

Thuật toán được mô tả bên dưới không giới hạn độ sâu của cây DOM được tạo hoặc độ dài của tên thẻ, tên thuộc tính , giá trị thuộc tính , nút văn bản, v.v. sẽ có khả năng buộc các tác nhân người dùng áp đặt các ràng buộc độ sâu lồng nhau.

Vì vậy, tôi cho rằng đó là câu trả lời của bạn.


25
Vậy câu trả lời nên là "không giới hạn" thì sao?
Anders Lindén

1
Cảm ơn bạn! Mặc dù tôi không thể nâng cao - câu trả lời này sẽ rất tuyệt nếu nó được mở đầu bằng một cái gì đó như, "về mặt lý thuyết HTML không có giới hạn kích thước." Đó là rất nhiều đọc chỉ để đi với một câu trả lời đơn giản như vậy.
rinogo

144

Tôi vừa mới viết một bài kiểm tra đặt một chuỗi có độ dài 10 triệu vào một thuộc tính và sau đó lấy lại nó và nó hoạt động tốt (Firefox 3.5.2 & Internet Explorer 7)

50 triệu khiến trình duyệt bị treo với thông báo "Tập lệnh này mất nhiều thời gian để hoàn thành".


4
10 triệu là một lượng dữ liệu khổng lồ như vậy.
rahul

3
Tôi vừa chỉnh sửa tập lệnh đó để đặt kích thước thành 50 triệu và nó đã hoạt động, nhưng đặt nó thành 100 triệu đã giết tab trong Chrome trước khi tôi thậm chí có cơ hội kiểm tra nó. : P
cHao

4
@nickf: Nó thực tế bị giới hạn (ví dụ: theo bộ nhớ) nhưng về mặt lý thuyết không giới hạn;)
Tim Schmelter

hết bộ nhớ bị rơi
holmi

Cảm ơn vì chỉ cần đi thẳng vào hàng hóa. Nếu tôi muốn đọc thông số SGML, tôi sẽ tìm thông số SGML!
rinogo

5

Tôi thực sự không nghĩ rằng có bất kỳ giới hạn. Tôi biết bây giờ bạn có thể làm

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

và nó hoạt động tốt. Mặc dù một chút không thể đọc được.


25
Một chút. -----
Paul Draper

4

Từ tài liệu cú pháp HTML5

9.1.2.3 Thuộc tính

Các thuộc tính cho một phần tử được thể hiện bên trong thẻ bắt đầu của phần tử.

Các thuộc tính có tên và giá trị. Tên thuộc tính phải bao gồm một hoặc nhiều ký tự không phải là ký tự khoảng trắng, U + 0000 NULL, U + 0022 NHANH CHÓNG ("), U + 0027 APOSTROPHE ('), U + 003E TUYỆT VỜI-THAN SẮC (>), U + 003E 002F SOLIDUS (/) và U + 003D CÁC ký tự ĐĂNG KÝ (=), các ký tự điều khiển và bất kỳ ký tự nào không được định nghĩa bởi Unicode. Trong cú pháp HTML, tên thuộc tính có thể được viết bằng bất kỳ kết hợp chữ cái viết thường và chữ hoa đó là một kết hợp không phân biệt chữ hoa chữ thường của ASCII cho tên của thuộc tính.

Các giá trị thuộc tính là một hỗn hợp của các tham chiếu văn bản và ký tự, ngoại trừ với các hạn chế bổ sung rằng văn bản không thể chứa một ký hiệu mơ hồ.

Các thuộc tính có thể được chỉ định theo bốn cách khác nhau:

  1. Cú pháp thuộc tính trống

  2. Cú pháp giá trị thuộc tính không được trích dẫn

  3. Cú pháp giá trị thuộc tính trích dẫn đơn

  4. Cú pháp giá trị thuộc tính trích dẫn kép

Ở đây đã không đề cập đến một giới hạn về kích thước của giá trị thuộc tính. Vì vậy, tôi nghĩ không nên có.

Bạn cũng có thể xác nhận tài liệu của bạn chống lại

Trình xác thực HTML5 (Rất thử nghiệm)


1

Tôi chưa bao giờ nghe về bất kỳ giới hạn nào về độ dài của các thuộc tính.

Trong thông số kỹ thuật HTML 4.01, trong phần Thuộc tính , không có gì đề cập đến bất kỳ giới hạn nào về điều này.

Tương tự trong HTML 4.01 DTD - thực tế, theo như tôi biết, DTD không cho phép bạn chỉ định độ dài cho các thuộc tính.

Nếu không có gì về điều đó trong HTML 4, tôi không tưởng tượng bất cứ điều gì giống như vậy sẽ xuất hiện cho HTML 5 - và tôi thực sự không thấy bất kỳ giới hạn độ dài nào trong phần Thuộc tính 9.1.2.3 cho HTML 5.


1

Từ http://dev.w3.org/html5/spec/Overview.html#embpping-custom-non-visible-data :

Mỗi phần tử HTML có thể có bất kỳ số lượng thuộc tính dữ liệu tùy chỉnh nào được chỉ định, với bất kỳ giá trị nào.

Cái được sử dụng để phân tích / xử lý các giá trị thuộc tính data- * này sẽ có các giới hạn.

Hóa ra các thuộc tính dữ liệu và giá trị được đặt trong một đối tượng DOMStringMap. Điều này không có giới hạn vốn có.

Từ http://dev.w3.org/html5/spec/Overview.html#domopesmap :

Lưu ý: Định nghĩa giao diện DOMStringMap ở đây chỉ dành cho môi trường JavaScript. Các ràng buộc ngôn ngữ khác sẽ cần xác định cách triển khai DOMStringMap cho các ngôn ngữ đó

DOMStringMap là một giao diện với getter, setter, greator và deleter. Trình thiết lập có hai tham số kiểu DOMString, tên và giá trị. Giá trị thuộc loại DOMString được ánh xạ trực tiếp vào Chuỗi JavaScript.

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

Độ dài tối đa của Chuỗi JavaScript là cụ thể triển khai.

[lưu ý: chrome đang báo cáo byte.com là nguồn phần mềm độc hại, vì vậy, hãy cẩn thận]


0

SGML Xác định các thuộc tính với một bộ giới hạn gồm 65 nghìn người từ thiện, xem tại đây: http://www.highdots.com/forums/html/length-html-attribution-175546.html

Mặc dù đối với những gì bạn đang làm, bạn sẽ ổn thôi. Đối với các giới hạn trên, tôi đã thấy jQuery sử dụng các thuộc tính dữ liệu giữ một vài k dữ liệu nhân cách.


5
HTML5 không phải là ngôn ngữ dựa trên SGML.
William Brendel

0

Đã thử nghiệm gần đây trong Edge (Phiên bản 81.0.416.58 (64 bit)) và các thuộc tính dữ liệu dường như có giới hạn 64k.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.