HTML 속성의 길이에 제한이 있습니까?


213

HTML의 속성 값이 너무 오래 걸립니까?

data-foo="bar"새 응용 프로그램에서 HTML5 스타일 데이터 속성 ( )을 사용하고 있으며 한 곳에서는 데이터를 상당히 많이 저장 (100 자 이상)하는 것이 정말 편리합니다. 나는이 금액이 괜찮다고 생각하지만 너무 많은 양에 대한 질문을 제기합니까?


1
자세한 내용 은 매우 긴 것으로 예상되는 다른 속성 중 하나 는 iframe@srcdoc( MDN (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) – [ 전체 문서를 포함하는 HTML5.2 ( 나는 당신이 문서를 좋아한다고 들었습니다 (…) )
FelipeAls

답변:


265

HTML 4

HTML 4 관점에서 속성은 SGML 구문입니다. 이들의 한계는 HTML 4SGML 선언에 정의되어 있습니다 .

         수량 SGMLREF
                  ATTCNT 60-증가-
                  ATTSPLEN 65536-가장 큰 값입니다-
                  LITLEN 65536-선언에 허용-
                  NAMELEN 65536-실제 고정 한계를 피하십시오-
                  PILEN 65536-HTML UA 구현-
                  TAGLVL 100
                  태 글런 65536
                  GRPGTCNT 150
                  GRPCNT 64

여기서 문제가되는 값은 "ATTSPLEN"이며 이는 요소의 속성 사양 목록 (해당 요소에 대한 모든 속성의 총 크기 여야 함)에 대한 제한입니다. 그러나 위에서 언급 한 바에 따르면 고정 된 제한은 피해야하므로 대부분의 구현에서 사용 가능한 메모리 이외의 실제 제한은 없을 것입니다.

HTML 5

HTML 5는 다음과 같이 서로 다른 것 같다 사양은 말한다, "비 SGML 기반으로 HTML이 버전은 이렇게 돌아갑니다."

나중에 HTML 5를 구문 분석하는 방법을 설명 할 때 다음 구절이 나타납니다 ( 강조 추가).

아래에 설명 된 알고리즘은 생성 된 DOM 트리의 깊이 또는 태그 이름, 속성 이름, 속성 값 , 텍스트 노드 등 의 길이에 제한 을 두지 않습니다 . 사용자 에이전트가 중첩 깊이 제약 조건을 강요 할 수 있습니다.

그래서 나는 그것이 당신의 대답이라고 생각합니다.


25
그렇다면 대답은 "무제한"이어야합니까?
Anders Lindén

1
감사합니다! 공감할 수는 없지만, "HTML 속성에는 이론적으로 크기 제한이 없습니다."라는 제목이 있으면이 답변이 훌륭 할 것입니다. 그것은 그러한 간단한 대답을 없애기 위해 많은 독서를합니다.
rinogo

144

방금 1000 만 길이의 문자열을 속성에 넣은 다음 다시 검색하여 정상적으로 작동 하는 테스트작성했습니다 (Firefox 3.5.2 및 Internet Explorer 7)

"이 스크립트는 완료하는 데 시간이 오래 걸립니다"라는 메시지와 함께 5 천만 개의 브라우저가 중단됩니다.


4
천만은 엄청난 양의 데이터입니다.
rahul

3
방금 스크립트를 편집하여 크기를 5 천만으로 설정하고 작동했지만 1 억으로 설정하면 Chrome에서 탭을 죽여서 테스트 할 기회조차 얻었습니다. : P
cHao

4
@nickf : 실제적으로 제한적이지만 (예 : 메모리에 의해) 이론적으로 무제한;)
Tim Schmelter

메모리 부족 충돌
holmium

물건을 바로 가져 주셔서 감사합니다. SGML 사양을 읽으려면 SGML 사양을 찾아보십시오!
rinogo

6

나는 정말로 한계가 없다고 생각합니다. 난 이제 네가 할 수 있다는 걸 알아

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

잘 작동합니다. 조금 읽을 수는 없지만.


27
조금. -----
Paul Draper

4

에서 HTML5 구문 문서

9.1.2.3 속성

요소의 속성은 요소의 시작 태그 안에 표시됩니다.

속성에는 이름과 값이 있습니다. 속성 이름은 공백 문자 이외의 하나 이상의 문자, U + 0000 NULL, U + 0022 QUOTATION MARK ( "), U + 0027 APOSTROPHE ( '), U + 003E GREATER-THAN SIGN (>), U + 이외의 문자로 구성되어야합니다. 002F SOLIDUS (/) 및 U + 003D EQUALS SIGN (=) 문자, 제어 문자 및 유니 코드로 정의되지 않은 문자 HTML 구문에서 속성 이름은 소문자와 대문자를 혼합하여 쓸 수 있습니다. 속성 이름에 대해 대소 문자를 구분하지 않는 ASCII 일치입니다.

속성 값은 텍스트에 모호한 앰퍼샌드를 포함 할 수 없다는 추가 제한 사항을 제외하고 텍스트와 문자 참조를 혼합 한 것입니다.

속성은 다음 네 가지 방법으로 지정할 수 있습니다.

  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 유형의 이름과 값의 두 매개 변수가 있습니다. 값은 JavaScript 문자열에 직접 맵핑되는 DOMString 유형입니다.

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

JavaScript 문자열의 최대 길이는 구현에 따라 다릅니다.

[참고 : chrome은 bytes.com을 악성 코드의 소스로보고하므로주의하십시오]



0

최근 Edge (버전 81.0.416.58 (64 비트))에서 테스트되었으며 데이터 속성의 한계는 64k로 보입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.