स्क्रिप्ट टैग के भीतर CDATA अनुभाग कब आवश्यक है?


907

क्या सीडीएए टैग कभी स्क्रिप्ट टैग में आवश्यक हैं और यदि ऐसा है तो कब?

दूसरे शब्दों में, यह कब और कहाँ है:

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

इसके लिए बेहतर:

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

18
अब जब XHTML अनिवार्य रूप से मृत हो गया है, तो क्या यह अब प्रासंगिक चिंता का विषय नहीं है?
अल्लौरकोड

80
@allyourcode: आपको क्या लगता है कि XHTML मर चुका है? एचटीएमएल 5? XHTML5 सही इसके साथ जाने के लिए है :)
Doktor J

4
@DoktorJ AFAIK xHTML संस्करण 1 पर था। यह HTML समतुल्य संस्करण 4 था। XHTML 2.0 में केंद्रित एक प्रयास था जो x5, xlink, समय और svg नाम स्थान को धक्का देने का इरादा रखता था, उसी विशेषताओं को सुधारने के तरीके के रूप में HTML 5 था। जोड़ने - xform / इनपुट-सत्यापन, समय / एनिमेशन, svg / कैनवास - लेकिन xHTML 2 युक्ति के लिए प्रयासों को HTML 5 सुविधाओं की ओर फिर से बढ़ाया गया। यह कहना नहीं है कि xHTML 2 गिरा दिया गया था या अप्रचलित हो गया था, लेकिन निकट भविष्य में इसकी योजना नहीं है।
मिहाई स्टैंचु

14
जावा सीम / जेएसएफ / फेसलेट्स विकास में एक्सएचटीएमएल मृत नहीं है।
जोजो

15
@ मिहाई स्टैंचु - यह पूरी तरह से सही नहीं है। W3C के अनुसार HTML5 के लिए एक XML सिंटैक्स है : "HTML5 के लिए उपयोग किया जा सकने वाला अन्य सिंटैक्स XML है। यह सिंटैक्स XHTML1 दस्तावेज़ और कार्यान्वयन के साथ संगत है। इस सिंटैक्स का उपयोग करने वाले दस्तावेज़ों को XML मीडिया प्रकार और तत्वों की आवश्यकता होती है। XML विशिष्टताओं द्वारा निर्धारित नियमों का पालन करते हुए w3.org/1999/xhtml नामस्थान में डाल दिया जाए । "
BrainSlugs83

जवाबों:


585

एक CDATA खंड की आवश्यकता है यदि आप XML के रूप में पार्स करने के लिए अपने दस्तावेज़ की जरूरत है (उदाहरण के लिए एक XHTML पेज XML के रूप में व्याख्या की है जब) और आप शाब्दिक लिखने के लिए सक्षम होना चाहते हैं i<10और a && bके बजाय i&lt;10औरa &amp;&amp; b , एक्सएचटीएमएल पार्स चरित्र डेटा के रूप में जावा स्क्रिप्ट कोड को पार्स के रूप में डिफ़ॉल्ट रूप से चरित्र डेटा के विपरीत। यह उन लिपियों के साथ कोई समस्या नहीं है जो बाहरी स्रोत फ़ाइलों में संग्रहीत हैं, लेकिन एक्सएचटीएमएल में किसी भी इनलाइन जावास्क्रिप्ट के लिए आप शायद सीडीएटीए अनुभाग का उपयोग करना चाहेंगे।

ध्यान दें कि कई एक्सएचटीएमएल पेजों को एक्सएमएल के रूप में पार्स करने का इरादा नहीं था, जिस स्थिति में यह एक मुद्दा नहीं होगा।

विषय पर एक अच्छा लिखने के लिए, https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm देखें


48
"सत्यापन" की तुलना में इसमें बहुत कुछ है। यदि वे एक अवैध चरित्र से टकराते हैं तो अधिकांश सख्त XML पार्सर पृष्ठ से नहीं जाएंगे। यह केवल W3C को खुश करने और लाल के बजाय हरा होने के बारे में अधिक है।
लोरेन सहगल

40
यदि आप बचते हैं &और <पात्रों को, आपको सीडीएटीए अनुभाग की आवश्यकता नहीं है; यह HTML और XHTML दोनों में ठीक काम करेगा। आप बाहरी लिपियों में सभी महत्वपूर्ण कोड डालकर और उदाहरण के लिए इनलाइन स्क्रिप्ट का उपयोग करके आसानी से इसे प्राप्त कर सकते हैं। आरंभ चर (भागने &/ <करने के लिए \x26/ \x3Cस्ट्रिंग शाब्दिक अगर आप की जरूरत है)।
9

23
HTML5 के मामले में क्या है?
मैथ्यू एटली

5
@ मैथ्यू एटले - यह एक अच्छा सवाल है। यह सुनिश्चित करने के लिए एक अलग थ्रेड पर पूछने के लिए एक महान प्रश्न हो कि उसे ध्यान की आवश्यकता हो।
एलेक्स कीस्मिथ

3
@ लॉरेन: तब यह अभी भी पूरी तरह से सत्यापन के बारे में है। एक उपयोगकर्ता-एजेंट अमान्य XML को किस हद तक अस्वीकार करता है, यह ऑर्थोगोनल है।
ऑर्बिट

231

जब ब्राउज़र मार्कअप को XML के रूप में मानते हैं:

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

जब ब्राउज़र मार्कअप को HTML मानते हैं:

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

जब ब्राउज़र मार्कअप को HTML मानते हैं और आप चाहते हैं कि आपका XHTML 1.0 मार्कअप (उदाहरण के लिए) मान्य हो।

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

12
कोड सुरक्षा के मामले के रूप में, ब्लॉक टिप्पणियों के साथ अपने सीडीएटीए को घेरना बेहतर है /* ... */क्योंकि अन्यथा यदि लाइन ब्रेक हटा दिए जाते हैं, तो कोड टूट जाएगा
ब्रायनहॉव

पहले खंड में "... एक्सएमएल के रूप में" ... गैर-व्याख्या किए गए पाठ के रूप में नहीं होना चाहिए? में stackoverflow.com/questions/2784183/what-does-cdata-in-xml-mean हम देखते हैं "... इन तार डेटा भी शामिल कर सकता है XML मार्कअप रूप में समझा जा, लेकिन नहीं होना चाहिए।"
मैट विल्की

@mattwilkie, "XML के रूप में" से मेरा क्या तात्पर्य है, जब ब्राउज़र मार्कअप को पार्स करने के लिए अपने XML पार्सर (HTML पार्सर के विपरीत) का उपयोग करते हैं, क्योंकि दस्तावेज़ को XML- आधारित माइम प्रकार या मार्कअप वाली फ़ाइल के साथ भेजा गया है एक XML- आधारित फ़ाइल एक्सटेंशन "।
शैडो 2531 12

127

एचटीएमएल

एक HTML पार्सर स्क्रिप्ट के भाग के रूप में <script>और उसके बीच सब कुछ </script>समझेगा। कुछ कार्यान्वयन को एक सही समापन टैग की आवश्यकता नहीं है; वे स्क्रिप्ट व्याख्या को " </" पर रोक देते हैं , जो चश्मे के अनुसार सही है

HTML5 में अपडेट करें , और वर्तमान ब्राउज़रों के साथ, अब ऐसा नहीं है।

तो, HTML में, यह संभव नहीं है:

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

एक CDATAसेक्शन का कोई प्रभाव नहीं पड़ता है । इसलिए आपको लिखना जरूरी है

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

या इसी के समान।

यह XHTML फ़ाइलों के रूप में भी लागू होता है text/html। (चूंकि IE XML सामग्री प्रकारों का समर्थन नहीं करता है, यह ज्यादातर सच है।)

एक्सएमएल

XML में, विभिन्न नियम लागू होते हैं। ध्यान दें कि (गैर IE) ब्राउज़र केवल एक XML पार्सर का उपयोग करते हैं यदि XHMTL दस्तावेज़ को XML सामग्री प्रकार के साथ परोसा जाता है।

XML पार्सर के लिए, एक scriptटैग किसी भी अन्य टैग से बेहतर नहीं है। विशेष रूप से, एक स्क्रिप्ट नोड में गैर-टेक्स्ट चाइल्ड नोड्स हो सकते हैं, जिन्हें " <" द्वारा ट्रिगर किया गया है ; और " &" चिन्ह एक वर्ण इकाई को दर्शाता है।

तो, XHTML में यह संभव नहीं है:

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

इसके चारों ओर काम करने के लिए, आप पूरी स्क्रिप्ट को एक CDATAसेक्शन में लपेट सकते हैं । यह पार्सर को बताता है: 'इस खंड में, " <" और " &" को नियंत्रण वर्णों के रूप में न मानें ।' जावास्क्रिप्ट इंजन को " <![CDATA[" और " ]]>" निशान की व्याख्या करने से रोकने के लिए , आप उन्हें टिप्पणियों में लपेट सकते हैं।

यदि आपकी स्क्रिप्ट में कोई " <" या " &" नहीं है, तो आपको किसी CDATAभी अनुभाग की आवश्यकता नहीं है।


2
"एक सीडीएटीए अनुभाग का कोई प्रभाव नहीं है" यह कथन (प्रस्तावित) एचटीएमएल 5 के लिए सही नहीं है, जो निर्माण को मान्यता देता है। w3.org/TR/html5/syntax.html#cdata-sections
danorton

3
@danorton दिलचस्प। मुझे लगता है कि यह एक बहुत बदसूरत मिश्रण है। हालांकि स्क्रिप्ट सामग्री में अभी भी कोई प्रभाव नहीं है।
user123444555621

2
नहीं पता था कि कोई </ स्क्रिप्ट स्क्रिप्ट खराब है।
सलमान ए

3
@ साल्मन यह HTML की विषमताओं में से एक है और इसे आधिकारिक रूप से ETAGO कहा जाता है । और जानें: mathiasbynens.be/notes/etago (जबकि लेख बताता है कि कोई भी ब्राउज़र कभी भी उस सुविधा को लागू नहीं करता है, मुझे पूरा यकीन है कि यह मेरे लिए कुछ परेशानी का कारण बन सकता है। शायद किसी अन्य उपकरण में)
user123444555621

1
वास्तव में मैं सत्यापन समस्याओं में भाग गया - <script>var b = "<b>bold</b>";</script>मान्य करने में विफल रहा, लेकिन आपके उत्तर को पढ़ने और <script>var b = "<b>bold<\/b>";</script>इसे निर्धारित करने के लिए बदलने के बाद ।
सलमान ए

30

मूल रूप से यह एक दस्तावेज लिखने की अनुमति है जो एक्सएचटीएमएल और एचटीएमएल दोनों है। समस्या यह है कि XHTML के भीतर, XML पार्सर स्क्रिप्ट टैग में &, <,> वर्णों की व्याख्या करेगा और XML पार्सिंग त्रुटि का कारण होगा। तो, आप अपने जावास्क्रिप्ट को संस्थाओं के साथ लिख सकते हैं, जैसे:

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

लेकिन यह अव्यावहारिक है। इससे भी बड़ी समस्या यह है कि यदि आप HTML में पेज को पढ़ते हैं, तो टैग स्क्रिप्ट को 'डिफ़ॉल्ट रूप से CDATA' माना जाता है, और ऐसे जावास्क्रिप्ट नहीं चलेगा। इसलिए, यदि आप चाहते हैं कि एक ही पृष्ठ XHTML और HTML पार्सर दोनों का उपयोग करके ठीक हो, तो आपको स्क्रिप्ट को XHTML में CDATA तत्व में संलग्न करना होगा, लेकिन इसे HTML में संलग्न नहीं करना चाहिए।

यह ट्रिक एक जावास्क्रिप्ट टिप्पणी के रूप में सीडीएटीए तत्व की शुरुआत को चिह्नित करती है; HTML में जावास्क्रिप्ट पार्सर CDATA टैग को अनदेखा करता है (यह एक टिप्पणी है)। एक्सएचटीएमएल में, एक्सएमएल पार्सर (जो जावास्क्रिप्ट से पहले चलाया जाता है) इसका पता लगाता है और सीडीएटीए के अंत तक बाकी का इलाज करता है।


24

यह एक एक्स (एचटी) एमएल बात है। जब आप जावास्क्रिप्ट की तरह <और >भीतर प्रतीकों का उपयोग करते हैं , जैसे दो पूर्णांकों की तुलना करने के लिए, तो इसे XML की तरह पार्स करना होगा, इस प्रकार वे एक टैग की शुरुआत या अंत के रूप में चिह्नित होंगे।

सीडीएटीए का अर्थ है कि निम्न पंक्तियाँ (सब कुछ अप करने के ]]>लिए एक्सएमएल नहीं है और इस तरह उस तरह से पार्स नहीं किया जाना चाहिए।


18

करो नहीं HTML4 में CDATA का उपयोग, लेकिन आप चाहिए XHTML में CDATA का उपयोग करें और चाहिए अगर आप <और> की तरह नहीं छोड़ा जाएगा प्रतीकों एक्सएमएल में CDATA का उपयोग करें।


11
HTML4 में CDATA मान्य नहीं है। सीधे शब्दों में कहें, यह व्याकरण का हिस्सा नहीं है। CDATA XML का एक सिंटैक्स है, और XHTML एक XML सबसेट है। इसलिए इसका उपयोग केवल XML (और इसके सबसेट) के अंदर किया जाना चाहिए। दूसरी ओर HTML XML नहीं है।
लोरेन सहगल

17

यह सुनिश्चित करने के लिए कि एक्सएचटीएमएल सत्यापन सही ढंग से काम करता है, जब आपके पास बाहरी संदर्भ के बजाय जावास्क्रिप्ट आपके पृष्ठ में एम्बेडेड होता है।

XHTML के लिए आवश्यक है कि आपका पृष्ठ XML मार्कअप आवश्यकताओं के अनुरूप हो। चूंकि जावास्क्रिप्ट में विशेष अर्थ वाले अक्षर हो सकते हैं, इसलिए आपको यह सुनिश्चित करने के लिए सीडीएटीए में लपेटना होगा कि सत्यापन इसे विकृत नहीं करता है।

वेब पर HTML पृष्ठों के साथ आप आवश्यक जावास्क्रिप्ट को टैग और टैग के बीच शामिल कर सकते हैं। जब आप अपने वेब पेज पर HTML को मान्य करते हैं, तो जावास्क्रिप्ट सामग्री को सीडीएटीए (चरित्र डेटा) माना जाता है जिसे इसलिए सत्यापनकर्ता द्वारा अनदेखा किया जाता है। यदि आप अपने वेब पेज को स्थापित करने में अधिक हाल के एक्सएचटीएमएल मानकों का पालन करते हैं तो यह सच नहीं है। XHTML के साथ स्क्रिप्ट टैग के बीच कोड को PCDATA (पार्स चरित्र वर्ण) माना जाता है जो इसलिए सत्यापनकर्ता द्वारा संसाधित किया जाता है।

इस वजह से, आप अपने वेब पेज पर 'अपने वेब पेज को तोड़ने' के बिना जावास्क्रिप्ट के बीच जावास्क्रिप्ट को शामिल नहीं कर सकते (कम से कम जहां तक ​​सत्यापनकर्ता का संबंध है)।

आप यहाँ CDATA के बारे में और XHTML के बारे में अधिक जान सकते हैं ।



9

जब आप सख्त एक्सएचटीएमएल अनुपालन के लिए जा रहे हैं, तो आपको सीडीएटीए की आवश्यकता है ताकि कम और एम्परसेंड को अमान्य वर्णों के रूप में चिह्नित न किया जाए।


8

xHTML सत्यापन के दौरान xml त्रुटियों से बचने के लिए।


8

CDATA ब्राउज़र को पाठ के रूप में प्रदर्शित करने के लिए कहता है और इसे HTML के रूप में प्रस्तुत करने के लिए नहीं।


6

CDATA इंगित करता है कि भीतर की सामग्री XML नहीं है।


5

किसी भी XML बोली में CDATA आवश्यक है, क्योंकि XML नोड के भीतर पाठ को जावास्क्रिप्ट के रूप में मूल्यांकन करने से पहले एक बाल तत्व के रूप में माना जाता है। यही वजह भी है कि जेएसएलआईएनटी ने< चरित्र के बारे में शिकायत की

संदर्भ



2

इस तरह पुराने ब्राउज़र जावास्क्रिप्ट कोड को पार्स नहीं करते और पेज नहीं टूटता।

पीछे की संगतता। निसंदेह, यह प्यारी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.