Есть ли ограничение на длину атрибутов HTML?

187

Сколько времени слишком долго для значения атрибута в HTML?

Я использую атрибуты данных стиля HTML5 (data-foo="bar") в новом приложении, и в одном месте было бы очень удобно хранить правдивый удар данных (более 100 символов). Хотя я подозреваю, что эта сумма в порядке, возникает вопрос о том, сколько слишком много?

  • 1
    Для информации, еще один атрибут, который, как ожидается, будет очень длинным, - это iframe@srcdoc ( MDN (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) - [HTML5.2, который содержит весь документ ( я слышал, что вам понравились документы, так (...) )
Теги:
custom-data-attribute

7 ответов

213
Лучший ответ

HTML 4

С точки зрения HTML 4 атрибуты представляют собой конструкцию SGML. Их пределы определены в SGML-декларации HTML 4:

         QUANTITY SGMLREF
                  ATTCNT   60      -- increased --
                  ATTSPLEN 65536   -- These are the largest values --
                  LITLEN   65536   -- permitted in the declaration --
                  NAMELEN  65536   -- Avoid fixed limits in actual --
                  PILEN    65536   -- implementations of HTML UA --
                  TAGLVL   100
                  TAGLEN   65536
                  GRPGTCNT 150
                  GRPCNT   64

Здесь речь идет о "ATTSPLEN", который был бы пределом в списке спецификаций атрибутов элемента (который должен быть общим размером всех атрибутов для этого элемента). В приведенной выше заметке упоминается, что фиксированные ограничения следует избегать, однако, вероятно, что в большинстве реализаций нет реального предела, кроме доступной памяти.

HTML 5

HTML 5 кажется другим, поскольку спецификация говорит: "Эта версия HTML, таким образом, возвращается к не-SGML основе".

Позже, когда описывается, как анализировать HTML 5, появляется следующий отрывок (выделение):

Ниже описан алгоритм без ограничений на глубине дерева DOM сгенерированный или по длине тегаимена, имена атрибутов, атрибут значения, текстовые узлы и т.д. разработчикам рекомендуется избегать произвольные пределы, признается что практические проблемы, скорее всего, заставить пользовательские агенты вводить вложенность глубинные ограничения.

Итак, я полагаю, это ваш ответ.

  • 12
    Таким образом, ответ должен быть «неограниченным» тогда?
111

Я только написал тест, который помещает строку длиной 10 миллионов в атрибут, а затем извлекает он снова, и он отлично работает (Firefox 3.5.2 и Internet Explorer 7)

50 миллионов заставляют браузер зависать с сообщением "Это сообщение script требуется для завершения".

  • 2
    10 миллионов - это огромное количество данных.
  • 16
    да - я просто показал, что это практически неограниченно.
Показать ещё 2 комментария
3

От документ синтаксиса HTML5

9.1.2.3 Атрибуты

Атрибуты для элемента выраженный внутри начала элемента тег.

Атрибуты имеют имя и значение. Имена атрибутов должны состоять из одного или больше символов, кроме пространства символы, U + 0000 NULL, U + 0022 ЦИКЛОВОЙ МАРК ("), U + 0027 АПОСТРОФ ('), U + 003E БОЛЬШЕ, ЧЕМ ЗНАК ( > ), U + 002F SOLIDUS (/) и U + 003D EQUALS Знаки SIGN (=), элемент управления символов и любых символов, которые не определены Unicode. в Синтаксис HTML, имена атрибутов могут быть написанные с любым сочетанием нижнего и прописные буквы, которые являются ASCII нечувствительность к регистру для имя атрибута.

Значения атрибутов представляют собой смесь текста и символьные ссылки, за исключением дополнительное ограничение, которое текст не может содержать двусмысленный амперсанд.

Атрибуты могут быть указаны в четырех разными способами:

  • Синтаксис пустых атрибутов

  • Синтаксис значения без кавычек

  • Синтаксис значения синтаксиса с кавычками

  • Синтаксис значения атрибута с двойным кавычком

Здесь не указано ограничение на размер значения атрибута. Поэтому я думаю, что их не должно быть.

Вы также можете проверить свой документ на

Validator (высоко экспериментально)

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- *, будет иметь ограничения.

Выключает атрибуты данных, а значения помещаются в объект DOMStringMap. Это не имеет присущих ему ограничений.

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

Примечание. Определение интерфейса DOMStringMap предназначено только для JavaScript. сред. Другие языковые привязки должны определять, как DOMStringMap должен быть реализовано для этих языков

DOMStringMap - это интерфейс с геттером, сеттерами, великолепием и делетером. У установщика есть два параметра типа DOMString, имя и значение. Значение имеет тип DOMString, который отображается непосредственно в строку JavaScript.

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

Максимальная длина строки JavaScript специфична для реализации.

[note: chrome сообщает bytes.com как источник вредоносного ПО, поэтому будьте осторожны.

0

SGML Определяет атрибуты с набором ограничений 65k charecters, см. здесь: http://www.highdots.com/forums/html/length-html-attribute-175546.html

Хотя для того, что вы делаете, вы должны быть в порядке. Что касается верхних пределов, я видел, что атрибуты данных jQuery используют несколько k личных данных.

  • 5
    HTML5 не является языком на основе SGML.
0

Я действительно не думаю, что есть какой-то предел. Теперь я знаю, что вы можете сделать

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

и он отлично работает. Хотя немного нечитаемо.

  • 18
    Немного. -----

Ещё вопросы

Сообщество Overcoder
Наверх
Меню