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



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



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

685   7  

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 длина тег имена, имена атрибутов, значения, текстовые узлы, и т. д. В то время как разработчикам рекомендуется, чтобы избежать произвольные пределы, это признано что практические проблемы, скорее всего заставить агентов пользователей наложить вложенность ограничения глубины.

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

Я написал тест который ставит строку длины 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 равно ЗНАК=( ) персонажи, управление знаки и символы, не определяются Юникодом. В Синтаксис 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 либо.

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

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

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

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

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

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

DOMStringMap-это интерфейс с getter, setter, greator и deleter. Сеттер имеет два параметра типа DOMString, имя и значение. Значение имеет тип DOMString, который сопоставляется непосредственно со строкой JavaScript.

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

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

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

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

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

Comments

    Ничего не найдено.