HTML属性的长度是否有限制?


213

HTML中的属性值需要多长时间?

data-foo="bar"在新的应用程序中使用HTML5样式数据属性(),并且在一个地方存储大量数据(最多100个字符)非常方便。虽然我怀疑这笔款项是可以的,但它提出了多少是太多的问题?


1
有关信息,另一个可能非常冗长的属性是iframe@srcdocMDN(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe)– [HTML5.2,其中包含一个完整的文档(我听说您喜欢文件,所以(…)
FelipeAls

Answers:


265

HTML 4

从HTML 4的角度来看,属性是SGML构造。它们的限制在HTML 4SGML声明中定义:

         QUANTITY SGMLREF
                  ATTCNT 60-增加了-
                  ATTSPLEN 65536-这些是最大值-
                  LITLEN 65536-声明中允许-
                  NAMELEN 65536-避免实际使用固定限制-
                  PILEN 65536-HTML UA的实现-
                  TAGLVL 100
                  TAGLEN 65536
                  玻璃钢150
                  玻璃钢碳纤维64

此处讨论的值是“ ATTSPLEN”,这是元素的属性规范列表的限制(应该是该元素的所有属性的总大小)。上面的注释提到应避免使用固定限制,但是,在大多数实现中,除了可用内存外,没有其他实际限制。

HTML 5

规范指出,HTML 5似乎有所不同,“此版本的HTML因此返回了非SGML基础。”

稍后,当描述如何解析HTML 5时,将出现以下段落(添加了重点):

下面描述的算法 对生成的DOM树的深度或标记名称,属性名称,属性值,文本节点等的长度没有限制。尽管鼓励实现者避免任意限制,但我们认识到实际问题可能会迫使用户代理施加嵌套深度限制。

所以我想这就是你的答案。


25
那么答案应该是“无限”呢?
安德斯·林登(AndersLindén)2015年

1
谢谢!尽管我不能接受-如果以“ HTML属性理论上没有大小限制”为开头,则此答案将是很棒的。仅仅为了得出如此简单的答案,就需要大量阅读。
rinogo

144

我刚刚编写了一个测试该测试将长度为1000万的字符串放入属性中,然后再次对其进行检索,并且效果很好(Firefox 3.5.2和Internet Explorer 7)

5000万个浏览器因“此脚本需要很长时间才能完成”消息而挂起。


4
1000万是如此庞大的数据量。
rahul

3
我刚刚编辑了该脚本,将大小设置为5000万,并且可以正常工作,但是将其设置为1亿,甚至在我没有机会对其进行测试之前就杀死了Chrome中的标签页。:P
cHao 2012年

4
@nickf:实际上是有限的(例如,受内存限制),但理论上是无限的;)
Tim Schmelter 2013年

内存不足崩溃
m

感谢您直接购买商品。如果我想阅读SGML规范,请查阅SGML规范!
rinogo '19

5

我真的不认为有任何限制。我知道你现在可以做

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

而且效果很好。尽管有点不可读。


25
一点。-----
Paul Draper 2014年

4

HTML5语法文档

9.1.2.3属性

元素的属性在元素的开始标记内表示。

属性具有名称和值。属性名称必须包含一个或多个空格字符以外的字符,U + 0000 NULL,U + 0022引号(“),U + 0027撇号('),U + 003E大于号(>),U + 002F SOLIDUS(/)和U + 003D EQUALS SIGN(=)字符,控制字符以及未由Unicode定义的任何字符在HTML语法中,属性名称可以大小写字母混合使用这是属性名称的ASCII大小写不敏感匹配。

属性值是文本和字符引用的混合,除了附加的限制是文本不能包含歧义的“&”号。

可以用四种不同的方式指定属性:

  1. 空属性语法

  2. 不带引号的属性值语法

  3. 单引号属性值语法

  4. 双引号属性值语法

这里没有提到对属性值大小的限制。所以我认为应该没有。

您还可以根据

HTML5验证程序(高度实验性)


1

我从未听说过对属性长度的任何限制。

在HTML 4.01规范中,在“ 属性部分中没有任何提及此方面的限制。

HTML 4.01 DTD中的相同-实际上,据我所知,DTD不允许您指定属性的长度。

如果HTML 4中没有关于此的任何内容,那么我也不会想到HTML 5会出现类似的东西-而且我实际上也没有在HTML 5 的9.1.2.3属性部分看到任何长度限制。


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是具有getter,setter,gregor和Deleter的接口。设置器具有两个DOMString类型的参数:名称和值。该值是DOMString类型,直接映射到JavaScript String。

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

JavaScript字符串的最大长度是特定于实现的。

[注意:chrome正在将bytes.com报告为恶意软件的来源,因此请注意]


0

SGML定义的属性限制为65k个字符集,请参见此处:http ://www.highdots.com/forums/html/length-html-attribute-175546.html

尽管对于您正在做的事情,您应该没问题。至于上限,我已经看到jQuery使用数据属性也可以保存几千个数据。


5
HTML5不是基于SGML的语言。
威廉·布伦德尔

0

最近在Edge(版本81.0.416.58(64位))中进行了测试,数据属性似乎限制为64k。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.