HTML属性の長さに制限はありますか?


213

HTMLの属性値にはどのくらいの長さですか?

私はdata-foo="bar"新しいアプリケーションでHTML5スタイルのデータ属性()を使用しています。ある場所では、データ(100文字以上)を適切に保存するのに非常に便利です。私はこの量は大丈夫だと思いますが、どれだけ多すぎるのかという疑問を投げかけます。


1
詳細については、非常に長くなると予想されるもう1つの属性はiframe@srcdocMDN(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe)– [HTML5.2にはドキュメント全体が含まれます(ドキュメントが気に入りました(…)
FelipeAls

回答:


265

HTML 4

HTML 4の観点からは、属性はSGMLの構成要素です。それらの制限は、HTML 4のSGML宣言で定義されています

         数量SGMLREF
                  ATTCNT 60-増加-
                  ATTSPLEN 65536-これらは最大の値です-
                  LITLEN 65536-宣言で許可-
                  NAMELEN 65536-実際には固定制限を回避します-
                  PILEN 65536-HTML UAの実装-
                  TAGLVL 100
                  タグレン65536
                  GRPGTCNT 150
                  GRPCNT 64

ここで問題になっている値は「ATTSPLEN」です。これは、要素の属性仕様リストの制限になります(これは、その要素のすべての属性の合計サイズである必要があります)。上記のメモでは、固定された制限は回避する必要があると述べられているため、ほとんどの実装で使用可能なメモリ以外に実際の制限はない可能性があります。

HTML 5

仕様にあるように、「このバージョンのHTMLは非SGMLベースに戻ります」とHTML 5は異なるようです。

後で、HTML 5を解析する方法を説明するときに、次の文章が表示されます(強調が追加されています)。

以下で説明するアルゴリズムで は、生成されるDOMツリーの深さ、またはタグ名、属性名、属性値、テキストノードなどの長さに制限はありません。実装者は任意の制限を回避することをお勧めしますが、実際的な問題はおそらくユーザーエージェントにネストの深さの制約を課すことになります。

それがあなたの答えだと思います。


25
では、答えは「無制限」でなければなりませんか?
AndersLindén2015

1
ありがとうございました!私は賛成できませんが、「HTML属性には理論的にサイズの制限はありません」のようなもので始まっていれば、この答えは素晴らしいでしょう。そのような単純な答えを思い付くためだけに、それはたくさんの読み物です。
rinogo

144

私はちょうど長さ1000万の文字列を属性に入れ、それを再び取得するテスト書いたところ、正常に動作しました(Firefox 3.5.2およびInternet Explorer 7)。

5000万は、「このスクリプトの完了には時間がかかります」というメッセージが表示され、ブラウザがハングする原因になります。


4
1000万は、このような膨大な量のデータです。
rahul

3
そのスクリプトを編集してサイズを5,000万に設定すると機能しましたが、1億に設定すると、テストする前にChromeのタブが削除されました。:P
cHao

4
@nickf:実質的には制限されています(メモリなどによる)が、理論的には無制限です;)
Tim Schmelter 2013年

メモリ不足によるクラッシュ
ホルミウム

商品をまっすぐに見てくれてありがとう。SGML仕様を読みたい場合は、SGML仕様を調べます。
rinogo

5

限界はないと思います。私は今あなたができることを知っています

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

そしてそれはうまく働きます。少し読めなくても。


25
少し。-----
ポールドレイパー

4

HTML5構文ドキュメントから

9.1.2.3属性

要素の属性は、要素の開始タグ内で表現されます。

属性には名前と値があります。属性名は、スペース文字以外の1つ以上の文字で構成する必要があります。U+ 0000 NULL、U + 0022 QUOTATION MARK( ")、U + 0027アポストロフィ( ')、U + 003E GREATER-THAN SIGN(>)、U + 002F SOLIDUS(/)、およびU + 003D等号(=)文字、制御文字、およびUnicodeで定義されていないすべての文字。HTML構文では、属性名は小文字と大文字を組み合わせて記述できます。これは、ASCIIの大文字小文字を区別しない属性名の一致です。

属性値は、テキストと文字参照の混合ですが、あいまいなアンパサンドをテキストに含めることはできないという追加の制限があります。

属性は、次の4つの方法で指定できます。

  1. 空の属性構文

  2. 引用符で囲まれていない属性値の構文

  3. 単一引用符で囲まれた属性値の構文

  4. 二重引用符で囲まれた属性値の構文

ここでは、属性値のサイズの制限について言及していません。だから私は何もないはずだと思います。

ドキュメントを検証することもできます

HTML5バリデーター(非常に実験的)


1

属性の長さの制限について聞いたことがありません。

HTML 4.01仕様の属性セクションでは、これに関する制限について言及することは何もありません。

HTML 4.01 DTDでも同じです。実際、私が知る限り、DTDでは属性の長​​さを指定できません。

HTML 4にそれが何もない場合、HTML 5にそのようなものが表示されることはないと思います。実際、HTML 5の9.1.2.3属性セクションにも長さの制限はありません。


1

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を備えたインターフェースです。セッターには、DOMString型の2つのパラメーター、名前と値があります。値は、JavaScript文字列に直接マップされるDOMString型です。

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

JavaScript文字列の最大長は実装固有です。

[注:chromeはマルウェアのソースとしてbytes.comを報告しているので、注意してください]


0

SGMLは、65,000文字の制限セットで属性を定義します。これは、http://www.highdots.com/forums/html/length-html-attribute-175546.htmlにあり ます。

あなたがやっていることのために、あなたは大丈夫でなければなりません。上限については、jQueryがデータ属性を使用して数kのデータを個人的に保持することを確認しました。


5
HTML5はSGMLベースの言語ではありません。
ウィリアム・ブレンデル

0

最近Edge(バージョン81.0.416.58(64ビット))でテストされ、データ属性には64kの制限があるようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.