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

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

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

7 ответов


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's --
                  TAGLVL   100
                  TAGLEN   65536
                  GRPGTCNT 150
                  GRPCNT   64

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

HTML 5

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

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

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

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


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

50 миллионов заставляет браузер зависать с сообщением "этот скрипт занимает много времени для завершения".


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

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

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


с HTML5 синтаксис doc

9.1.2.3 атрибутами

атрибуты элемента выражает внутри элемента метка.

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

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

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

  1. пустой синтаксис атрибута

  2. синтаксис значения атрибута без кавычек

  3. синтаксис значения атрибута с одной кавычкой

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

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

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

HTML5 валидатор (очень экспериментальный)


Я никогда не слышал о каких-либо ограничениях на длину атрибутов.

в спецификации HTML 4.01, в атрибуты нет ничего, что упоминает какие-либо ограничения на это.

же HTML 4.01 DTD -- на самом деле, насколько я знаю, DTD не позволяет вам указывать длину атрибутов.

Если нет ничего об этом в HTML 4, я не думаю, что что-то подобное появится для HTML 5-и я на самом деле не вижу никакого ограничения длины в 9.1.2.3 атрибутами Раздел для HTML 5 либо.


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

каждый HTML-элемент может иметь любое количество пользовательских атрибутов данных с любым значением.

что используется для анализа/обработки этих данных* значения атрибутов будут ограничения.

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

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

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

DOMStringMap-это интерфейс с геттером, сеттером, greator и deleter. Сеттер имеет два параметра в виде domstring. тип, имя и значение. Значение имеет тип DOMString, который отображается непосредственно в строку JavaScript.

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

максимальная длина строки JavaScript зависит от реализации.

[ Примечание: chrome сообщает bytes.com как источник вредоносных программ так, остерегайтесь ]


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

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