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

nic*_*ckf 206 html html5 custom-data-attribute

HTML中的属性值有多长时间?

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

bob*_*mcr 252

HTML 4

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

         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树的深度或标签名称,属性名称,属性值,文本节点等的长度没有限制.虽然鼓励实现者避免任意限制,但是认识到实际问题可能会强制用户代理施加嵌套深度约束.

所以我想这是你的答案.

  • 所以答案应该是"无限的"呢? (16认同)
  • 谢谢你!虽然我不能投票 - 如果这个答案以“理论上 HTML 属性没有大小限制”之类的内容开头,那就太好了。读了很多书才得到如此简单的答案。 (3认同)

nic*_*ckf 139

我刚刚写了一个测试,它将一个长度为1000万的字符串放入一个属性然后再次检索它,它运行正常(Firefox 3.5.2和Internet Explorer 7)

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

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

pri*_*stc 8

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

<a onclick=" //...insert 100KB of javascript code here">
Run Code Online (Sandbox Code Playgroud)

它工作正常。虽然有点看不懂。


rah*_*hul 6

来自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 验证器(高度实验性)