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


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

我正在使用HTML5样式数据属性(data-foo="bar")在一个新的应用程序中,在一个地方存储一个公平的数据(超过100个字符)真的很方便。虽然我怀疑这个数量很好,但它提出了多少太多的问题?


188
2017-09-30 04:19


起源


有关信息,预计会有另一个属性 非常 冗长的是 iframe@srcdoc (MDN(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) - [HTML5.2 其中包含一整个文件(我听说你喜欢文件所以(...)) - FelipeAls


答案:


HTML 4

从HTML 4的角度来看,属性是SGML构造。他们的限制在 SGML宣言HTML 4

         QUANTITY SGMLREF
                  ATTCNT 60  - 增加 - 
                  ATTSPLEN 65536  - 这些是最大的价值 - 
                  LITLEN 65536  - 在声明中允许 - 
                  NAMELEN 65536  - 实际避免固定限制 - 
                  PILEN 65536  -  HTML UA的实现 - 
                  TAGLVL 100
                  TAGLEN 65536
                  GRPGTCNT 150
                  GRPCNT 64

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

HTML 5

HTML 5似乎有所不同,如 规范 他说,“这个版本的HTML因此返回到非SGML基础。”

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

下面描述的算法放置    没有限制 关于DOM树的深度   生成,或 在长度上 标签   名称,属性名称, 属性   值,文本节点等   鼓励实施者避免   任意限制,这是公认的   可能存在实际问题   强制用户代理强制嵌套   深度限制。

所以我想这是你的答案。


235
2017-09-30 04:54



所以答案应该是“无限的”呢? - Anders Lindén


我刚刚 写了一个测试 它放了一串长度 千万 进入一个属性,然后再次检索它,它工作正常(Firefox 3.5.2和Internet Explorer 7)

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


123
2017-09-30 04:49



1000万是如此庞大的数据量。 - rahul
是的 - 我只是表明它实际上是无限的。 - nickf
我刚刚编辑了这个脚本,将大小设置为5000万并且它有效,但是在我有机会测试之前,将其设置为1亿就杀死了Chrome中的标签。 :P - cHao
@nickf:它实际上是有限的(例如,通过记忆)但理论上是无限的;) - Tim Schmelter


HTML5语法文档

9.1.2.3属性

元素的属性是   在元素的开头内表达   标签。

属性具有名称和值。   属性名称必须由一个或   除了空间以外的更多角色   字符,U + 0000 NULL,U + 0022   引号(“),U + 0027 APOSTROPHE   ('),U + 003E GREATER-THAN SIGN(>),   U + 002F SOLIDUS(/)和U + 003D EQUALS   SIGN(=)字符,控件   字符和任何字符   不是由Unicode定义的。在里面   HTML语法,属性名称可能是   写下任何低和 - 的混合   大写字母是ASCII   不区分大小写的匹配   属性的名称。

属性值是文本的混合   和字符引用,除了   额外的限制   文字不能含有歧义   符号。

属性可以指定为四个   不同的方式:

  1. 空属性语法

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

  3. 单引号属性值语法

  4. 双引号属性值语法

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

您还可以根据。验证您的文档

HTML5验证器(高度实验)


3
2017-09-30 04:47





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

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

它工作正常。虽然有点难以理解。


2
2017-09-30 04:42



一点。 ----- - Paul Draper


我从来没有听说过属性的长度有任何限制。

在HTML 4.01规范中,在 关于属性的部分 没有任何提及任何限制。

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

如果在HTML 4中没有任何相关内容,我无法想象HTML 5中会出现类似内容 - 我实际上看不到任何长度限制 9.1.2.3属性 HTML 5部分。


1
2017-09-30 04:42





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,greator和deleter的接口。 setter有两个DOMString类型的参数,名称和值。 该值的类型为DOMString,它直接映射到JavaScript String。

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

JavaScript String的最大长度是特定于实现的。

[注意:chrome报告bytes.com是恶意软件的来源,所以要小心]


1
2017-09-30 05:04





SGML定义属性,限制集为65k charecters,如下所示: http://www.highdots.com/forums/html/length-html-attribute-175546.html

虽然你正在做的事情,你应该没事。 至于上限,我已经看到jQuery使用数据属性同样拥有几k数据。


0
2017-09-30 04:49



HTML5不是基于SGML的语言。 - William Brendel