2010-08-25 15 views
14

अब मैं 7 साल से वेबसाइटों और एक्सएमएल इंटरफेस विकसित करता हूं, और कभी भी ऐसी परिस्थिति में नहीं आया, जहां > के लिए वास्तव में आवश्यक था। सभी disambiguition अब तक <, &, " और ' अकेले के हवाले द्वारा नियंत्रित किया जा सकता है।> कभी आवश्यक है?

क्या कोई भी किसी स्थिति में है (उदाहरण के लिए, एसजीएमएल प्रोसेसिंग, ब्राउज़र समस्याएं, एक्सएसएलटी, ...) जहां आपको &gt; के साथ साइन-इन से अधिक से बचने के लिए अपरिहार्य पाया गया है?

अद्यतन: मैं सिर्फ XML spec साथ की जाँच की है, जहां यह कहते हैं, उदाहरण के लिए, चरित्र डेटा के बारे में खंड 2.4 में:

चरित्र डाटा

[14]  CharData  ::=  [^<&]* - ([^<&]* ']]>' [^<&]*) 

तो भी वहाँ, > को सीडीएटीए अनुभाग के अंतिम अनुक्रम को छोड़कर कुछ विशेष के रूप में उल्लेख नहीं किया गया है।

यह एक ही मामले में, जहां > किसी भी महत्व का है, फिर से एक CDATA अनुभाग, ]]> के समाप्त होने होगा, लेकिन फिर अगर आप, यह बोली होगी बोली (यानी, शाब्दिक स्ट्रिंग ]]&gt;) होगा सचमुच उत्पादन में भूमि (यह है, क्योंकि CDATA)।

+4

हो सकता है कि मुझे समझ नहीं आता, लेकिन यह HTML/JS के इंजेक्शन को रोकने में मदद करता है। इसके परिणामस्वरूप यदि आपका परिणाम HTML xhtml अनुरूप होना आवश्यक है। – Nate

+4

मुझे लगता है कि यह किसी और चीज की तुलना में '<' 'के साथ समरूपता के लिए अधिक है। –

+1

आपको कभी भी इसकी आवश्यकता नहीं है क्योंकि ब्राउज़र कंपाइलर्स की तरह नहीं हैं, वे बहुत ही अनुमोदित/क्षमाशील हैं, इसलिए वेब पर मानकों की अज्ञानता। क्या आप जावास्क्रिप्ट स्ट्रिंग में "'" से बच नहीं रहे हैं? ('var test = 'मैं बताउंगा'; ') यह वही बात है। –

उत्तर

7

आपको बिल्कुल इसकी आवश्यकता नहीं है क्योंकि लगभग कोई एक्सएमएल दुभाषिया समझ जाएगा कि आपका क्या मतलब है। लेकिन यदि आप ऐसा करते हैं तो भी आप बिना किसी सुरक्षा के एक विशेष चरित्र का उपयोग करते हैं।

एक्सएमएल सभी अर्थपूर्ण के बारे में है, और यह वास्तव में अर्थपूर्ण अनुपालन नहीं है।

बारे में अपने अद्यतन, तो आप इस हिस्सा भूल गया:

सही कोण कोष्ठक (>) स्ट्रिंग ">" का उपयोग कर प्रस्तुत किया जा सकता है, और, संगतता के लिए, या तो "&gt; का उपयोग कर भाग निकले किया जाना चाहिए ]]> "सामग्री में" या एक चरित्र संदर्भ जब यह स्ट्रिंग में प्रकट होता है ", जब कि स्ट्रिंग एक CDATA अनुभाग के अंत अंकन नहीं है। ,

<xmlmarkup> 
]]> 
</xmlmarkup> 

यहाँ ]]> हिस्सा वर्ष SGML पारसर्स के साथ एक समस्या हो सकती है तो यह = ]]&gt; में भाग निकले किया जाना चाहिए:

उपयोग के मामले दस्तावेज में दिए गए कुछ इस तरह के बारे में अधिक है संगतता के कारणों के लिए।

+1

* लगभग * भाग के बारे में क्या? क्या कोई ऐसा है जो एक अनिश्चित '>' से एक हिकअप प्राप्त करता है? – Boldewyn

+1

ठीक है, अगर किसी ने एक एक्सएमएल पार्सर लिखा है जो केवल एक्सएमएल मानकों का सम्मान करता है, तो ऐसा हो सकता है। मुझे एक पार्सर नहीं पता है जो इस व्यवहार को प्राप्त कर सकता है, लेकिन यह उसकी गलती नहीं होगी और न ही कोई समस्या होगी। –

+0

एक्सएमएल पार्सर जो एक्सएमएल मानकों का सम्मान करता है उसे अनिवार्य '>' स्वीकार करना होगा। मुझे लगता है कि आपके द्वारा उद्धृत अनुच्छेद गैर-अनुपालन पार्सर्स या शायद पुराने के पुराने (ड्राफ्ट) संस्करण के साथ संगतता को संदर्भित करता है। – Daniel

3

(x) एचटीएमएल दस्तावेज़ों के लेखक के रूप में इतना नहीं, लेकिन वेबसाइटों में मैला लिखित टिप्पणियों के क्षेत्र के उपयोगकर्ता के रूप में अधिक, जो आपको "एचटीएमएल" डालने के लिए "ऑफर" करता है।

मेरा मतलब है कि यदि आप अपनी साइट को सही तरीके से करते हैं, तो आप अपनी सामग्री को वैसे भी हार्डकोड नहीं करेंगे, है ना? तो htmlentities पर आपका कॉल या जो कुछ भी (लंबे समय तक नहीं देखता, php) आपके लिए विशेष पात्रों को बदलने का ख्याल रखेगा। तो यकीन है कि, आप मैन्युअल &gt; टाइप नहीं होगा, लेकिन मुझे आशा है कि आप उन उपायों तो > स्वचालित रूप से बदल दिया जाता है ले लो।

3

मैंने सख्त xml सत्यापनकर्ता को पास करने के लिए one not 19 hours पहले उपयोग किया था। एक और मामला तब होता है जब आप वास्तव में एचटीएमएल/एक्सएमएल सामग्री पाठ (विशेषताओं के बजाय) में इसका उपयोग करते हैं, जैसे: <

निश्चित रूप से, एक लक्स पार्सर आप जो कुछ भी फेंकते हैं उसे स्वीकार करेंगे, लेकिन यदि आप कभी भी XSS, & लेफ्टिनेंट के बारे में चिंतित हैं; आपका दोस्त है।

अद्यतन: यहाँ एक उदाहरण है जहाँ आप Firefox में > से बचने के लिए की जरूरत है:

<?xml version="1.0" encoding="utf-8" ?> 
<test> 
    ]]> 
</test> 

दी, यह अभी भी एक अकेला > से बचने के लिए होने का एक उदाहरण नहीं है।

+0

असल में, क्या आपके संदर्भित उदाहरण ने भी काम किया होगा, अगर आप * केवल * <'' से बच निकले हैं? यह वास्तव में मेरा मामला है। और यदि नहीं, तो पार्सर गलत है, या क्या मुझे एक्सएमएल स्पेक में जगह मिली है? http://w3.org/TR/xml/#NT-AttValue – Boldewyn

+0

ठीक है, अब मैं उस बिंदु को देखता हूं जिसे आप प्राप्त करने का प्रयास कर रहे हैं। पोस्ट को एक उदाहरण के साथ अपडेट किया गया है जो फ़ायरफ़ॉक्स में पैरािंग त्रुटियों को देता है, लेकिन यदि आपको कभी भी भागने की आवश्यकता नहीं है तो पार्स होगा। – Douglas

+1

हाँ, अब हम वही सोच रहे हैं। कॉलिन और मुझे वह भी मिला। ऐसा लगता है कि, कम से कम "एसजीएमएल के एक्सएमएल भाग" -वर्ल्ड में, यह एकमात्र प्रासंगिक उदाहरण है जहां '> 'समझ में आता है। – Boldewyn

0

मैं सिर्फ एक और उदाहरण है, जहां आप एचटीएमएल 5 में > उद्धृत करने के लिए (नहीं XHTML5) दस्तावेजों की जरूरत के बारे में सोचा: आप (जो कुछ है, कि निश्चित रूप से तर्क दिया जा सकता) उद्धरण चिह्नों के बिना विशेषताओं में यह की जरूरत है।

<img src=arrow.png alt=&gt;> 

एक्सएचटीएमएल

के बराबर होना चाहिए
<img src="arrow.png" alt=">" /> 

लेकिन तब फिर से, (? <! एक्स) एचटीएमएल SGML नहीं है।

0

कल्पना कीजिए कि आपके पास निम्न पाठ this is a not a ]]> nice day है और आप इसे सीडीएटीए अनुभाग <![CDATA[this is a not a ]]> nice day]]> से घूमने का निर्णय लेते हैं।

आदेश है कि से बचने के लिए (और समाप्त नहीं की गई चिह्नित वर्गों के साथ SGML टुकड़े की पार्स अनुमति देने के लिए), आईएसओ 8879 के खंड 10.4: वाणी 1986 कि एक चिह्नित अनुभाग बाहर ]]> की घटना एक त्रुटि है।

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

एक उदाहरण के लिए, SGML में लिख सकते हैं:

<!ENTITY %WHATTODO "INCLUDE"> 
<![%WHATTODO;[<b>]]&gt;</b>]]> 

कौन सा के बराबर है:

<b>]]&gt;</b> 
संबंधित मुद्दे