it-swarm-ko.tech

스크립트 태그에서 CDATA 섹션은 언제 필요합니까?

스크립트 태그에는 CDATA 태그가 필요합니까? 그렇다면 언제입니까?

다른 말로하면, 언제 어디서 :

<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>

이것보다 바람직 :

<script type="text/javascript">
...code...
</script>
871
brad

CDATA 섹션은 문서를 XML로 구문 분석해야하는 경우 (예 : XHTML 페이지가 XML로 해석되는 경우) 필요하고 i<10 대신 a && bi&lt;10를 리터럴로 작성하려는 경우 a &amp;&amp; b, XHTML은 기본적으로 문자 데이터와 반대로 JavaScript 코드를 구문 분석 된 문자 데이터로 구문 분석합니다. 이것은 외부 소스 파일에 저장된 스크립트의 문제는 아니지만 XHTML의 모든 인라인 JavaScript의 경우 아마도 CDATA 섹션을 사용하려고합니다.

많은 XHTML 페이지는 결코 XML로 파싱되도록 ​​의도되지 않았으며,이 경우에는 문제가되지 않습니다.

주제에 대한 글을 잘 작성하려면 https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm 을 참조하십시오.

572
Michael Ridley

브라우저가 마크 업을 XML로 처리 할 때 :

<script>
<![CDATA[
    ...code...
]]>
</script>

브라우저가 마크 업을 HTML로 처리 할 때 :

<script>
    ...code...
</script>

브라우저가 마크 업을 HTML로 처리하고 XHTML 1.0 마크 업 (예 :)이 유효성을 검사하도록하려는 경우.

<script>
//<![CDATA[
    ...code...
//]]>
</script>
231
Shadow2531

HTML

HTML 파서는 <script></script> 사이의 모든 것을 스크립트의 일부로 취급합니다. 일부 구현에는 올바른 닫기 태그가 필요하지 않습니다. "</"에서 스크립트 해석을 중지합니다. specs.

Update HTML5 및 현재 브라우저에서는 더 이상 그렇지 않습니다.

따라서 HTML에서 이것은 not 불가능합니다.

<script>
var x = '</script>';
alert(x)
</script>

CDATA 섹션은 효과가 전혀 없습니다 . 그렇기 때문에 글을 써야합니다

var x = '<' + '/script>'; // or
var x = '<\/script>';

또는 유사합니다.

이는 text/html로 제공되는 XHTML 파일에도 적용됩니다. IE는 XML 컨텐츠 유형을 지원하지 않으므로 대부분의 경우에 해당합니다.

XML

XML에서는 다른 규칙이 적용됩니다. XHMTL 문서가 XML 컨텐츠 유형으로 제공되는 경우 (비 IE) 브라우저는 XML 구문 분석기 만 사용합니다.

XML 파서에서 script 태그는 다른 태그보다 낫지 않습니다. 특히, 스크립트 노드는 "<"에 의해 트리거 된 텍스트가 아닌 자식 노드를 포함 할 수 있습니다. "&"부호는 문자 엔터티를 나타냅니다.

따라서 XHTML에서 이것은 not 불가능합니다.

<script>
if (a<b && c<d) {
    alert('Hooray');
}
</script>

이 문제를 해결하기 위해 전체 스크립트를 CDATA 섹션에 줄 바꿈 할 수 있습니다. 파서에게 '이 섹션에서 는 "<"및 "&"을 제어 문자 로 취급하지 않습니다. . ' JavaScript 엔진이 "<![CDATA["및 "]]>"표시를 해석하지 못하도록 주석으로 묶을 수 있습니다.

스크립트에 "<"또는 "&"이 없으면 CDATA 섹션이 필요하지 않습니다.

121
user123444555621

기본적으로 XHTML과 HTML 인 문서를 작성할 수 있습니다. 문제는 XHTML 내에서 XML 파서가 script 태그의 &, <,> 문자를 해석하여 XML 구문 분석 오류를 발생시키는 것입니다. 따라서 항목과 함께 자바 스크립트를 작성할 수 있습니다 (예 :

if (a &gt; b) alert('hello world');

그러나 이것은 비현실적입니다. 더 큰 문제는 HTML로 페이지를 읽으면 script 태그가 '기본적으로 CDATA'로 간주되어 이러한 JavaScript가 실행되지 않는다는 것입니다. 따라서 XHTML 및 HTML 파서를 사용하여 동일한 페이지를 확인하려면 XHTML의 CDATA 요소에 script 태그를 묶어야하지만 HTML로 묶지 않아야합니다.

이 트릭은 CDATA 요소의 시작을 JavaScript 주석으로 표시합니다. HTML에서 JavaScript 파서는 CDATA 태그를 무시합니다 (주석입니다). XHTML에서는 XML 구문 분석기 (JavaScript보다 먼저 실행 됨)가 CDATA를 감지하고 CDATA의 끝이 CDATA로 끝날 때까지 나머지를 처리합니다.

30
ondra

그것은 X (HT) ML 것입니다. JavaScript 내에서 <>와 같은 기호를 사용할 때 (예 : 두 정수를 비교하기 위해서는 XML과 같이 파싱해야하므로 태그의 시작 또는 끝으로 표시됩니다.

CDATA는 다음 행 (]]>까지의 모든 것이 XML이 아니므로 그런 식으로 해석해서는 안됨)을 의미합니다.

23
Franz

<->와 같이 이스케이프 처리되지 않은 기호가있는 경우 not HTML4에서 CDATA를 사용하지만 should CDATA를 사용하고 must XML에서 CDATA를 사용하십시오.

18
Loren Segal

외부 참조가 아닌 페이지에 JavaScript가 포함되어있을 때 XHTML 유효성 검사가 올바르게 작동하는지 확인하십시오.

XHTML을 사용하려면 페이지가 XML 마크 업 요구 사항을 엄격하게 준수해야합니다. JavaScript에는 특수한 의미의 문자가 포함될 수 있으므로 유효성 검사에서 형식이 잘못된 것으로 표시되지 않도록 CDATA로 랩핑해야합니다.

웹에서 HTML 페이지를 사용하면 태그 사이에 필요한 JavaScript 만 포함 할 수 있습니다. 웹 페이지에서 HTML의 유효성을 검사 할 때 JavaScript 내용은 CDATA (문자 데이터)로 간주되므로 유효성 검사기에서 무시됩니다. 웹 페이지 설정에서 최신 XHTML 표준을 따르는 경우에도 마찬가지입니다. XHTML을 사용하면 스크립트 태그 사이의 코드가 PCDATA (구문 분석 된 문자 데이터)로 간주되므로 유효성 검사기가 처리합니다.

이 때문에 웹 페이지를 '깨뜨리지 않고'(적어도 유효성 검사기가 관련되는 한) 페이지의 스크립트 태그 사이에 JavaScript를 포함시킬 수는 없습니다.

여기에 CDATA에 대한 자세한 내용여기에 XHTML에 대한 자세한 내용 을 배울 수 있습니다.

17
LBushkin

CDATA는 내용이 XML이 아님을 나타냅니다.

다음은 wikipedia에 대한 설명입니다.

10
Alex Beardsley

엄격한 XHTML 준수를 수행 할 때 CDATA가 필요하고보다 작고 앰퍼샌드가 잘못된 문자로 표시되지 않도록해야합니다.

9
Chris Shaffer

xhtml 유효성 검사 중에 xml 오류를 피하십시오.

8
gehsekky

CDATA는 브라우저에 텍스트를 그대로 표시하고 HTML로 렌더링하지 않도록 지시합니다.

8
Ikaso

CDATA는 내용이 XML이 아님을 나타냅니다.

6
Jim

XML 노드의 텍스트는 JavaScript로 평가되기 전에 자식 요소로 처리되기 때문에 모든 XML 언어에서 CDATA가 필요합니다. 이것은 정규 표현식에서 < 문자에 대한 JSLint가 불평하는 이유이기도합니다.

참조

5
Paul Sweatte

유효성을 검사 할 때 (XML/XHTML에서 감사합니다. Loren Segal ).

2
ceejayoz

그런 식으로 오래된 브라우저는 Javascript 코드를 분석하지 못하고 페이지가 깨지지 않습니다.

이전 버전과의 호환성. 그것을 사랑해야 해.

2
Tyler Carter