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