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

Is there a limit to the length of HTML attributes?

提问人:nickf 提问时间:9/30/2009 最后编辑:Deduplicatornickf 更新时间:10/25/2022 访问量:94370

问:

HTML 中的属性值有多长才算太长?

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

html 自定义数据属性

评论

1赞 FelipeAls 1/15/2018
作为信息,另一个预计会很长的属性是 (MDN(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) – [HTML5.2,它包含整个文档(我听说你喜欢文档,所以 (...iframe@srcdoc)

答:

11赞 priestc 9/30/2009 #1

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

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

而且效果很好。虽然有点不可读。

2赞 Pascal MARTIN 9/30/2009 #2

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

在 HTML 4.01 规范中,在属性部分中,没有提到对此的任何限制。

HTML 4.01 DTD 中也是如此——事实上,据我所知,DTD 不允许你指定属性的长度。

如果 HTML 4 中没有这方面的内容,我不认为 HTML 5 会出现类似的东西——而且我实际上在 HTML 5 的 9.1.2.3 属性部分也没有看到任何长度限制。

5赞 rahul 9/30/2009 #3

来自 HTML5 语法文档

9.1.2.3 属性

元素的属性包括 在元素的开始中表示 标记。

属性具有名称和值。 属性名称必须由一个或 空格以外的更多字符 字符,U+0000 NULL,U+0022 引号 (“), U+0027 撇号 ('), U+003E 大于符号 (>), U+002F SOLIDUS (/) 和 U+003D 等于 SIGN (=) 字符,控件 字符,以及任何 不是由 Unicode 定义的。在 HTML 语法,属性名称可以是 用 lower- 和 作为 ASCII 的大写字母 不区分大小写的匹配项 属性的名称。

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

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

  1. 空属性语法

  2. 未加引号的属性值语法

  3. 单引号属性值语法

  4. 双引号属性值语法

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

您还可以根据

HTML5 Validator(实验性强)

174赞 nickf 9/30/2009 #4

我刚刚写了一个测试(注意!请参阅下面的更新)它将一个长度为1000万的字符串放入一个属性中,然后再次检索它,并且它工作正常(Firefox 3.5.2和Internet Explorer 7)

5000万使浏览器挂起,并显示“此脚本需要很长时间才能完成”消息。

更新:我已经修复了脚本:它以前将innerHTML设置为长字符串,现在它正在设置数据属性。https://output.jsbin.com/wikulamuni它对我有用,长度为 1 亿。YMMV。

el.setAttribute('data-test', <<a really long string>>)

评论

2赞 Jey Geethan 11/25/2022
哇,天哪....!
0赞 Mikko Rantalainen 3/9/2023
请注意,测试是否可以在运行时设置值。我将原始问题解释为您可以从解析的 HTML 文件中读取多少数据?也就是说,数据位于 HTML 源代码中,您可以使用例如 阅读它。setAttribute()getAttribute()
1赞 SuperRoach 9/30/2009 #5

SGML 定义具有 65k 个字符的限制集的属性,如下所示:http://www.highdots.com/forums/html/length-html-attribute-175546.html

虽然对于你正在做的事情,你应该没事。 至于上限,我已经看到jQuery使用数据属性个人也保存了几k个数据。

评论

5赞 William Brendel 9/30/2009
HTML5 不是基于 SGML 的语言。
316赞 bobbymcr 9/30/2009 #6

HTML5 对属性值的长度没有限制。

正如规范所说,“因此,此版本的 HTML 将回归到非 SGML 基础。

稍后,在描述如何解析 HTML5 时,出现了以下段落(强调后加):

下面描述的算法对 DOM 树的深度没有限制 生成,或对标签的长度 名称, 属性名称, 属性 值、文本节点等。而 鼓励实施者避免 任意限制,它是公认的 实际问题可能会 强制用户代理强制嵌套 深度约束。

因此,(理论上)HTML5 属性的长度/大小没有限制

有关涵盖 HTML4 的原始答案,请参阅修订历史记录。

2赞 user78706 9/30/2009 #7

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 类型的参数,name 和 value。 该值的类型为 DOMString,即直接映射到 JavaScript 字符串。

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

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

2赞 Peter Waher 4/21/2020 #8

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