XML दस्तावेज़ों में मुझे किन वर्णों से बचने की आवश्यकता है?


924

XML दस्तावेज़ों में किन वर्णों से बच जाना चाहिए, या मुझे ऐसी सूची कहां मिल सकती है?


7
उदाहरण:<company>AT&amp;T</company>
जैकट्रेड्स

देखें सरलीकृत एक्सएमएल से बचने के लिए एक संक्षिप्त और आसानी से याद गाइड के लिए नीचे दिए गए है कि मैं प्राथमिक स्रोतों से आसुत है ( W3C एक्सटेंसिबल मार्कअप लैंग्वेज (XML) 1.0 (पांचवें संस्करण) )।
kjhughes

जवाबों:


1355

यदि आप एक उपयुक्त वर्ग या पुस्तकालय का उपयोग करते हैं, तो वे आपके लिए पलायन करेंगे। कई XML समस्याएँ स्ट्रिंग समवर्ती के कारण होती हैं।

एक्सएमएल भागने के पात्र

केवल पाँच हैं:

"   &quot;
'   &apos;
<   &lt;
>   &gt;
&   &amp;

बचने के पात्र इस बात पर निर्भर करते हैं कि विशेष पात्र का उपयोग कहाँ किया गया है।

उदाहरण W3C मार्कअप सत्यापन सेवा में मान्य किए जा सकते हैं ।

टेक्स्ट

सुरक्षित तरीका यह है कि पाठ में सभी पाँच वर्णों से बच जाएँ। हालाँकि, तीन वर्ण ", 'और >पाठ में भाग जाने की आवश्यकता नहीं है:

<?xml version="1.0"?>
<valid>"'></valid>

गुण

सुरक्षित तरीका यह है कि विशेषताओं में सभी पांच वर्णों को छोड़ दिया जाए। हालांकि, >चरित्र को विशेषताओं में बच जाने की जरूरत नहीं है:

<?xml version="1.0"?>
<valid attribute=">"/>

'चरित्र गुण में उपयोग नहीं किया जाना जरूरत उद्धरण हैं ":

<?xml version="1.0"?>
<valid attribute="'"/>

इसी तरह, "यदि उद्धरण हैं, तो विशेषताओं में बच नहीं जाना चाहिए ':

<?xml version="1.0"?>
<valid attribute='"'/>

टिप्पणियाँ

सभी पांच विशेष पात्रों को टिप्पणियों में नहीं बचना चाहिए :

<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>

CDATA

सभी पांच विशेष पात्रों को सीडीएटीए अनुभागों में बचाना नहीं चाहिए :

<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>

प्रसंस्करण निर्देश

XML प्रोसेसिंग निर्देशों में सभी पांच विशेष वर्णों को नहीं बचना चाहिए :

<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>

XML बनाम HTML

HTML में भागने के कोड का अपना सेट है जो बहुत अधिक वर्णों को कवर करता है।


33
@Pacerier, मैं आपसे विनती करता हूं कि आप अपना XML / HTML भागने वाला कोड न लिखें। लाइब्रेरी फ़ंक्शन का उपयोग करें या आप किसी विशेष मामले को याद करने के लिए बाध्य हैं।
जेसन

5
इसके अलावा लाइन ब्रेक के लिए आपको & # xA का उपयोग करने की आवश्यकता है; & # xD; और & # x9; टैब के लिए, यदि आपको एक विशेषता में इन वर्णों की आवश्यकता है।
मूलांक

78
यदि आप इन पर फाइंड / रिप्लेसमेंट करने जा रहे हैं, तो बस & amp; दूसरों से पहले प्रतिस्थापन।
डग

2
@Doug मैं सिर्फ एक ही बात का उल्लेख करने के बारे में था - या अन्य सभी प्रतिस्थापित पात्रों को भ्रष्ट किया जाएगा, और जैसे चीजें &quot;बदल दी जाएंगी&amp;quot;
जैरी डॉज

5
विकिपीडिया से: "सभी अनुमत यूनिकोड वर्णों को एक संख्यात्मक वर्ण संदर्भ के साथ दर्शाया जा सकता है।" तो वहाँ बहुत कुछ कर रहे हैं 5.
टिम कूपर

93

शायद इससे मदद मिलेगी:

XML और HTML चरित्र इकाई संदर्भों की सूची :

SGML, HTML और XML दस्तावेजों में, वर्ण डेटा और विशेषता मान के रूप में जाना जाने वाला तार्किक निर्माण वर्णों के अनुक्रम से मिलकर बनता है, जिसमें प्रत्येक वर्ण सीधे (स्वयं का प्रतिनिधित्व करते हुए) प्रकट हो सकता है, या वर्णों की एक श्रृंखला द्वारा प्रतिनिधित्व किया जा सकता है जिसे चरित्र संदर्भ कहा जाता है, जिनमें से दो प्रकार हैं: एक संख्यात्मक चरित्र संदर्भ और एक चरित्र इकाई संदर्भ। यह आलेख HTML और XML दस्तावेज़ों में मान्य वर्ण इकाई संदर्भों को सूचीबद्ध करता है।

वह लेख निम्नलिखित पाँच पूर्वनिर्धारित XML संस्थाओं को सूचीबद्ध करता है:

quot  "
amp   &
apos  '
lt    <
gt    >

73

वर्ल्ड वाइड वेब कंसोर्टियम (w3C) की विशिष्टताओं के अनुसार, ऐसे 5 वर्ण हैं जो किसी XML दस्तावेज़ में अपने शाब्दिक रूप में प्रकट नहीं होने चाहिए , सिवाय इसके कि जब मार्कअप सीमांकक के रूप में या एक टिप्पणी, एक प्रसंस्करण निर्देश, या सीडीएटीए अनुभाग के रूप में उपयोग किया जाता है । अन्य सभी मामलों में, निम्न तालिका के अनुसार संबंधित वर्ण या संख्यात्मक संदर्भ का उपयोग करके इन वर्णों को प्रतिस्थापित किया जाना चाहिए:

Original CharacterXML entity replacementXML numeric replacement
<                              &lt;                                    &#60;                                    
>                              &gt;                                   &#62;                                    
"                               &quot;                               &#34;                                    
&                              &amp;                               &#38;                                    
'                               &apos;                               &#39;                                    

ध्यान दें कि पूर्वोक्त निकाय HTML में & apos के अपवाद के साथ भी उपयोग किए जा सकते हैं ; , जिसे XHTML 1.0 के साथ पेश किया गया था और HTML 4 में घोषित नहीं किया गया है। इस कारण से, और रेट्रो-संगतता सुनिश्चित करने के लिए, XHTML विनिर्देशन & # 39 के उपयोग की अनुशंसा करता है; बजाय।


14
XML उन पाँच संस्थाओं को पूर्वनिर्धारित करता है, लेकिन यह बिल्कुल निर्दिष्ट नहीं करता है कि आप उन पाँच वर्णों में से किसी का भी उनके शाब्दिक रूप में उपयोग नहीं कर सकते हैं। हर जगह (और सीडीएटीए को छोड़कर) भागना पड़ता है। "और 'केवल विशेषता मानों में बच जाना है, और केवल यदि संबंधित उद्धरण वर्ण समान है। और> वास्तव में कभी भी नहीं
बचना है

3
जैसा कि ऊपर लिखा गया है, <> "और 'मार्कअप सीमांकक के रूप में या एक टिप्पणी, एक प्रसंस्करण निर्देश, या एक सीडीएटीए अनुभाग के रूप में उपयोग किए जाने से बचना नहीं है। जब आप <> XML टैग के रूप में उपयोग करते हैं तो आप इससे बच नहीं सकते। एक टिप्पणी के लिए एक ही बात (क्या आप एक XML फ़ाइल की टिप्पणी लाइन में एक से बच सकते हैं? आपको ज़रूरत नहीं है, और यदि आप नहीं करते हैं, तो आपका XML अभी भी वैध है)। आधिकारिक सिफारिशों में यह स्पष्ट रूप से निर्दिष्ट है। XML द्वारा W3C
एल्बज

7
@ShaunMcCance >को बचना चाहिए अगर यह ]]सामग्री के भीतर है, जब तक कि यह ]]>सीमांत खंड का हिस्सा नहीं है जो सीडीएटीए अनुभाग के अंत का संकेत देता है।
ली डी

2
एक necromancer नहीं है, लेकिन @Albz यह कहने में गलत है कि इन वर्णों को सामग्री में हकदार होना चाहिए। W3.org/TR/REC-xml/#NT-CharData पर अनुभाग 2.4 देखें । TL; DR का संस्करण यह है कि chardata तत्व सामग्री में, & amp; और & lt; हमेशा हकदार होना चाहिए। & Gt; चरित्र MAY का हकदार होना चाहिए, हालाँकि यह तब होना चाहिए जब शाब्दिक स्ट्रिंग "]]] में प्रदर्शित हो"> क्योंकि अन्यथा इसे CDATA अनुभाग को समाप्त करने के रूप में पढ़ा जाएगा। एकल-उद्धरण और दोहरे-उद्धरण के लिए, आप चाहें तो बच सकते हैं। यह वह है, तत्वों के अंदर चारधाता के लिए। XML के अन्य घटकों के अन्य नियम हैं।
स्काई --- कप्तान

52

टैग और विशेषताओं के लिए अक्षर अलग करना अलग है।

टैग के लिए:

 < &lt;
 > &gt; (only for compatibility, read below)
 & &amp;

विशेषताओं के लिए:

" &quot;
' &apos;

से चरित्र डाटा और मार्कअप :

एम्परसेंड वर्ण (और) और बाएं कोण कोष्ठक (<) उनके शाब्दिक रूप में प्रकट नहीं होना चाहिए, सिवाय इसके जब मार्कअप सीमांकक के रूप में उपयोग किया जाता है, या एक टिप्पणी, एक प्रसंस्करण निर्देश, या सीडीएटीए अनुभाग के भीतर। यदि उन्हें कहीं और जरूरत है, तो उन्हें क्रमशः संख्यात्मक चरित्र संदर्भों या "& amp;" और "& lt;" का उपयोग करके बच जाना चाहिए। सही कोण ब्रैकेट (>) को स्ट्रिंग "& gt;" का उपयोग करके दर्शाया जा सकता है, और अनुकूलता के लिए, सामग्री में "" & gt; जब वह स्ट्रिंग CDATA अनुभाग के अंत को चिह्नित नहीं कर रहा है।

एकल और दोहरे उद्धरण दोनों को शामिल करने के लिए विशेषता मानों की अनुमति देने के लिए, एपोस्ट्रोफ या एकल-उद्धरण वर्ण (') को "& apos;", और दोहरे-भाव वाले चरित्र (") के रूप में" & quot; "।


इसका तात्पर्य यह है कि विशेषताओं के लिए केवल उद्धरणों से बचने की आवश्यकता है, लेकिन यह अन्य तीन वर्णों के अतिरिक्त है
eug

40

एक पुराने, आमतौर पर पूछे जाने वाले प्रश्न का नया, सरलीकृत उत्तर ...

सरलीकृत XML एस्केप (प्राथमिकता, 100% पूर्ण)

  1. हमेशा (90% याद रखना महत्वपूर्ण है)

    • भागने <के रूप में &lt;जब तक <एक शुरू कर रहा है <tag/>
    • भागने &के रूप में &amp;जब तक &एक शुरू कर रहा है &entity;
  2. मूल्यों को याद रखें (याद रखने के लिए 9% महत्वपूर्ण)

    • attr=" 'डबल कोट्स 'में सिंगल कोट्स ठीक हैं।"
    • attr=' "सिंगल कोट्स के "भीतर डबल कोट्स ठीक हैं।'
    • भागने "के रूप में &quot;और 'के रूप में &apos;नहीं तो।
  3. टिप्पणियाँ , सीडीएटीए , और प्रोसेसिंग निर्देश (याद रखने के लिए 0.9% महत्वपूर्ण)

  4. Esoterica (याद करने के लिए 0.1% महत्वपूर्ण)

    • भागने ]]>के रूप में ]]&gt;जब तक ]]>एक CDATA खंड समाप्त हो रहा है।
      (यह नियम सामान्य रूप से वर्ण डेटा पर लागू होता है - CDATA अनुभाग के बाहर भी।)

ध्यान देने योग्य एक अन्य नियम: सीडीएटा अनुभाग में नहीं होने पर भी ]]>बच जाना चाहिए ]]&gt;। कि प्राप्त करने का सबसे आसान तरीका करने के लिए हो सकता है हमेशा से बचने >के रूप में &gt;
माइकल काय

धन्यवाद, @MichaelKay मैंने आपके उपयोगी नोट को शामिल कर लिया है, ]]> लेकिन यह सुझाव देने के बजाय कि इसे > हमेशा बच निकलने के बजाय इसे esoterica में बदलना है (जैसा कि आप जानते हैं, इसकी आवश्यकता नहीं है)। XML से बचने के नियमों को आसानी से याद रखने और 100% सटीक बनाने के लिए यहाँ मेरा लक्ष्य है ।
khhughes

उपर्युक्त उत्तर सहित सभी पाँच वर्णों को स्वीकार किया जाना चाहिए ताकि वे अंदर की विशेषताओं से बच सकें। क्या आपके पास XML मानक का कोई संदर्भ है जो आप कह रहे हैं, क्योंकि आपका उत्तर तार्किक रूप से सही है?
रोमन सूसी

1
@ रोमनसुसी: हाँ, कई अन्य उत्तरों में त्रुटियां या अतिवृद्धि ("सुरक्षित तरीका ...") है, जो आधिकारिक XML BNF की सुनवाई, गलत व्याख्या या गलतफहमी पर आधारित है। मेरा उत्तर W3C XML अनुशंसा द्वारा उचित (ए) 100% है; आधिकारिक बीएनएफ के कई जुड़े संदर्भ देखें, और (बी) संक्षिप्त, तार्किक, और आसानी से उन आवश्यकताओं की प्रगति को याद किया।
kjhughes

@RomanSusi: विशिष्ट कथन है कि "सभी पांच पात्रों विशेषताओं के अंदर भाग निकले किया जाना चाहिए" आधिकारिक BNF शासन के लिए द्वारा लापरवाही मार्गदर्शन असमर्थित है AttValueपर एक लिंक के माध्यम से मेरा उत्तर में उद्धृत 2. विशेषता मान
kjhughes

25

आमतौर पर ज्ञात पांच पात्रों [<,>, &, ", और '] के अलावा, मैं ऊर्ध्वाधर टैब वर्ण (0x0B) से भी बचूंगा। यह मान्य UTF-8 है, लेकिन XML XML मान्य नहीं है, और यहां तक ​​कि कई पुस्तकालय भी हैं। (अत्यधिक पोर्टेबल (एएनएसआई सी) लाइब्रेरी libxml2 सहित ) इसे याद करते हैं और चुपचाप अवैध XML आउटपुट करते हैं।


11

एक्सिडेंट: XML, से बचकर

पाँच पूर्वनिर्धारित संस्थाएँ हैं:

&lt; represents "<"
&gt; represents ">"
&amp; represents "&"
&apos; represents '
&quot; represents "

"सभी अनुमत यूनिकोड वर्णों को एक संख्यात्मक वर्ण संदर्भ के साथ दर्शाया जा सकता है।" उदाहरण के लिए:

&#20013;

अधिकांश नियंत्रण वर्णों और अन्य यूनिकोड श्रेणियों को विशेष रूप से बाहर रखा गया है, जिसका अर्थ है (मुझे लगता है) वे बच सकते हैं या प्रत्यक्ष नहीं हो सकते हैं:

XML में मान्य वर्ण


3

ये संदर्भ पर निर्भर करता है। सामग्री के लिए, यह < और & , और ]]> है (हालांकि एक वर्ण के बजाय तीन की एक स्ट्रिंग)।

विशेषता मानों के लिए, यह < , & , " , और 'है

CDATA के लिए, यह ]]> है


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