2008-11-08 22 views
34

मेरी वेबसाइट एक बात के अलावा एक्सएचटीएमएल संक्रमणकालीन अनुरूप है अपने पृष्ठों में इस तरह आम तौर पर कर रहे हैं:XHTML और और (एम्पसेंड) एन्कोडिंग

cannot generate system identifier for general entity "y"

:

<a href="http://www.foo.com/page.aspx?x=1&y=2">Foo</a> 

लेकिन XHTML validator इस त्रुटि उत्पन्न करता है

... और यह चाहता है यूआरएल इस तरह लिखा होना चाहिए:

<a href="http://www.foo.com/page.aspx?x=1&amp;y=2">Foo</a> 

समस्या यह है कि IE और Firefox URL सही तरीके से संभाल नहीं है और y पैरामीटर ध्यान न दें। मैं यह लिंक कैसे काम कर सकता हूं और सही तरीके से मान्य कर सकता हूं?

मुझे ऐसा लगता है कि यह असंभव है XHTML पृष्ठ लिखने के लिए करता है, तो ब्राउज़र सख्त एन्कोडेड एक्सएचटीएमएल यूआरएल के साथ काम नहीं करते।

क्या आप कार्रवाई में देखना चाहते हैं?

http://stackoverflow.com/search?q=ff&sort=newest 

और

http://stackoverflow.com/search?q=ff&amp;sort=newest 
+0

अपने एक्सएचटीएमएल दस्तावेज़ के यूआरएल में & का उपयोग करना ठीक काम करना चाहिए, इसलिए समस्या कहीं और हो सकती है, क्योंकि अन्य पहले ही बता चुके हैं। यदि आप कुछ सर्वर साइड स्क्रिप्टिंग भाषा का उपयोग करके यूआरएल उत्पन्न करते हैं, तो शायद आप उस कोड में से कुछ पोस्ट कर सकते हैं, इसलिए अन्य लोग देख सकते हैं कि समस्या क्या हो सकती है? – Daan

उत्तर

54

मैंने अभी यह कोशिश की है। आपने जो करने का प्रयास किया वह सही है। एचटीएमएल में यदि आप एक लिंक लिख रहे हैं तो & अक्षरों को &amp; के रूप में एन्कोड किया जाना चाहिए, तो आप & को %26 के रूप में एन्कोड करेंगे यदि आप पैरामीटर मान को एम्पर्सेंड रखना चाहते हैं। मैंने अभी एक साधारण HTML पृष्ठ लिखा है जिसमें एक लिंक शामिल है: <a href="Default2.aspx?param1=63&amp;param2=hel">Click me</a> और यह ठीक काम करता है: default2.aspx उद्देश्यों को प्राप्त किया गया और स्रोत सत्यापन पास हो गया।

& के एन्कोडिंग &amp; के रूप में HTML में आवश्यक है, लिंक में नहीं। जब ब्राउज़र एक लिंक के लिए HTML स्रोत में &amp; देखता है तो यह इसे एम्पर्सेंड के रूप में समझता है और लिंक लक्ष्य इरादे के रूप में होगा।यदि आप अपने ब्राउज़र पता बार में एक यूआरएल पेस्ट करते हैं तो यह एचटीएमएल होने की उम्मीद नहीं करता है और इसमें किसी भी एचटीएमएल एन्कोडिंग की व्याख्या करने की कोशिश नहीं की जाती है। यही कारण है कि आपका उदाहरण लिंक जो आप सुझाव देते हैं कि हमें ब्राउज़र में कॉपी/पेस्ट करना चाहिए, काम नहीं करते हैं और हम उन्हें काम करने की उम्मीद क्यों नहीं करेंगे।

यदि आप अपने वास्तविक कोड का थोड़ा अधिक पोस्ट करते हैं तो हम यह देखने में सक्षम होंगे कि आपने क्या किया है, लेकिन आप अपने एंकर टैग में &amp; का उपयोग कर सही दिशा का नेतृत्व कर रहे हैं। पहले से ही & इनकोडिंग हाइपरलिंक नियंत्रण, इसलिए मेरे यूआरएल http://foo?x=1&amp;y=2, http://foo?x=1&amp;amp;y=2

आम तौर पर यूआरएल के अंदर & amp सही ढंग से ब्राउज़र द्वारा नियंत्रित किया जाता है करने के लिए इनकोडिंग था के रूप में आप ने कहा:

+0

धन्यवाद यह बहुत अच्छा काम करता है –

5

आप अपने पृष्ठ के भीतर अपने URL में &amp; बजाय & इस्तेमाल कर सकते हैं: (कॉपी और पेस्ट के रूप में वे कर रहे हैं) इन दो लिंक के बीच का अंतर देखें।

कि यह एक सख्त एक्सएचटीएमएल मान्य करने की अनुमति चाहिए ...

<a href="http://www.foo.com/page.aspx?x=1&amp;y=2">Foo</a> 

ध्यान दें, यदि एक ASP.NET Request.QueryString समारोह द्वारा इस्तेमाल किया, क्वेरी स्ट्रिंग एक्सएमएल एन्कोडिंग का उपयोग नहीं है, यह का उपयोग करता है URL encoding: उस मामले में, Server.URLEncod:

/mypath/mypage?b=%26stuff 

तो तुम% में एक समारोह अनुवाद '&' प्रदान करने के लिए 26

नोट की जरूरत है ई ("neetu & geetu"), जो neetu +% 26 + geetu उत्पन्न करेगा, वह नहीं है जो आप चाहते हैं, क्योंकि आपको & को% 26 में अनुवाद करने की आवश्यकता है, न कि केवल '&'। '% 26amp' को प्रतिस्थापित करने के लिए आपको URLENcode परिणाम पर लागू एक प्रतिस्थापन() कॉल जोड़ना होगा; '% 26' द्वारा।

+0

क्षमा करें, मैंने आपको टिप्पणी के बजाय एक नए उत्तर के साथ उत्तर दिया है ... अगर आप थ्रेड –

+0

का पालन करना चाहते हैं तो मेरा उत्तर देखें;) इस समस्या में जांच – VonC

6

यह मेरी गलती थी। धन्यवाद

-4

समस्या आपके विचार से भी बदतर है - सफारी में इसे आजमाएं। & amp; & # 38 में परिवर्तित हो जाता है; और हैश यूआरएल समाप्त होता है। सही जवाब एक्सएचटीएमएल आउटपुट नहीं करना है - ऐसा कोई कारण नहीं है जो विकास पर अधिक समय व्यतीत करने और मैक उपयोगकर्ताओं को अलगाव करने का औचित्य देता है।

+0

यह होगा एचटीएमएल में अमान्य के रूप में। – TRiG

-1

और भी गहन होने के लिए: &#38;, संख्यात्मक वर्ण संदर्भ का उपयोग करें।

क्योंकि &amp; एक कैरेक्टर एंटिटी संदर्भ है:

Character entity references are defined in the markup language definition. This means, for example, that for HTML only a specific range of characters (defined by the HTML specification) can be represented as character entity references (and that includes only a small subset of the Unicode range).

W3C पर बुद्धिमान लोग से आ रहा है यही कारण है कि (और अधिक के लिए this पढ़ें)।

बेशक, यह एक बहुत बड़ा सौदा नहीं है, लेकिन डब्ल्यू 3 सी का सुझाव यह है कि संख्यात्मक व्यक्ति हर जगह और हमेशा वैध और उपयोग योग्य होगा, जबकि नामित एक HTML के लिए 'ठीक' है लेकिन कुछ भी नहीं।

+0

वह दस्तावेज़ यह भी कहता है कि ['&' हर जगह काम करता है] (http://www.w3.org/International/questions/qa-escapes#use)। – Quentin

+0

नामित लोगों को लागू डीटीडी के प्रति संख्यात्मक संदर्भों के लिए मैप किया गया है। चूंकि '&' सभी एक्सएमएल और एचटीएमएल डीटीडी द्वारा समर्थित है, यह हमेशा बहुत अधिक है। हालांकि, नामित व्यक्ति को पार्स करने वाले डीटीडी या 'सादे' एसजीएमएल के बिना काम नहीं करेगा और संख्यात्मक एक होगा। इसके अलावा, एक्सएमएल 1.0 में केवल पांच प्री-डिफ़ाइंड नामित संदर्भ हैं, इसलिए आप केवल संख्याओं का उपयोग करने के बजाय नाम और संख्या मिश्रण कर सकते हैं। – kasimir

संबंधित मुद्दे