Существует ли ограничение на длину атрибутов 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 длина тег имена, имена атрибутов, значения, текстовые узлы, и т. д. В то время как разработчикам рекомендуется, чтобы избежать произвольные пределы, это признано что практические проблемы, скорее всего заставить агентов пользователей наложить вложенность ограничения глубины.
Так что я полагаю, что это ваш ответ.
Я написал тест который ставит строку длины 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 равно ЗНАК=( ) персонажи, управление знаки и символы, не определяются Юникодом. В Синтаксис HTML, имена атрибутов могут быть написано с любым сочетанием нижних-и заглавные буквы в ASCII без учета регистра для имя атрибута.
значения атрибутов представляют собой смесь текста и ссылки на символы, за исключением дополнительное ограничение, что текст не может содержать двусмысленного амперсанд.
атрибуты могут быть указано в четырех разные способы:
пустой синтаксис атрибута
синтаксис значения атрибута без кавычек
синтаксис значения атрибута в одинарных кавычках
синтаксис значения атрибута в двойных кавычках
здесь не упоминается ограничение на размер значения атрибута. Поэтому я думаю, что их не должно быть.
вы также можете проверьте ваш документ против
Я никогда не слышал каких-либо ограничений на длину атрибутами.
в спецификации 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