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区分大小写匹配。
属性值是文本和字符引用的混合,除了附加的限制是文本不能包含模糊的&符号。
属性可以用四种不同的方式指定:
空属性语法
未加引号的属性值语法
单引号属性值语法
双引号属性值语法
这里没有提到对属性值大小的限制。 所以我觉得应该没有。
你也可以根据你的文件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使用的数据属性也包含几个人的数据。