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

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

我在一个新的应用程序中使用了HTML5风格的数据属性( data-foo="bar" ),并且在一个地方存储一个公平的数据(100个字符以上)非常方便。 虽然我怀疑这个数字是好的,但是这提出了多less太多的问题?

HTML 4

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

          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

HTML5似乎是不同的,正如规范所说:“这个版本的HTML因此返回到非SGML基础。

稍后,在描述如何parsingHTML 5时,会出现以下内容( 重点添加):

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

所以我想这是你的答案。

我刚刚写了一个testing ,将1000万string放入一个属性中,然后再次检索,并且工作正常(Firefox 3.5.2和Internet Explorer 7)

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

从HTML5语法文档

9.1.2.3属性

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

属性有一个名字和一个值。 属性名称必须由空格字符以外的一个或多个字符组成,U + 0000 NULL,U + 0022 QUOTATION MARK(“),U + 0027 APOSTROPHE('),U + 003E GREATER-SIGN SIGN(>),U + 002F SOLIDUS(/)和U + 003D EQUALS SIGN(=)字符,控制字符以及任何不由Unicode定义的字符。在HTML语法中,属性名称可以使用任意小写和大写字母这是属性名称的ASCII区分大小写匹配。

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

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

  1. 空属性语法

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

  3. 单引号属性值语法

  4. 双引号属性值语法

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

你也可以根据你的文件validation你的文档

HTML5validation器(高度实验)

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

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

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

如果在HTML 4中没有任何关于HTML5的内容,我不会想象HTML5中会出现任何类似的内容,而且我也没有在HTML5的9.1.2.3属性部分中看到任何长度限制。

http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data

每个HTML元素可以具有指定的任意数量的自定义数据属性,并具有任何值。

那些用来parsing/处理这些data- *属性的值将会有限制。

结果数据属性和值被放置在DOMStringMap对象中。 这没有内在的限制。

http://dev.w3.org/html5/spec/Overview.html#domstringmap

注意:这里的DOMStringMap接口定义只适用于JavaScript环境。 其他语言绑定将需要定义如何为这些语言实现DOMStringMap

DOMStringMap是一个与getter,setter,greator和deleter的接口。 setter有两个DOMStringtypes的参数,名称和值。 该值是直接映射到JavaScriptstring的DOMStringtypes的值。

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

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

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

我真的不觉得有什么限制。 我知道现在你可以做

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

它工作正常。 尽pipe有点难以理解。

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

虽然对于你在做什么,你应该没问题。 至于上限,我已经看到jQuery使用的数据属性也包含几个人的数据。