क्या किसी URL में एक से अधिक प्रश्न चिह्न होना मान्य है?


91

मैं आज निम्नलिखित URL पर आया:

http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497

क्वेरी स्ट्रिंग की शुरुआत में दोगुना प्रश्न चिह्न देखें:

??blogid=122&entry_id=64497

मेरे ब्राउज़र को इससे कोई परेशानी नहीं हुई, और एक तेज़ बुकमार्कलेट चलाना:

javascript:alert(document.location.search);

बस मुझे ऊपर दिखाया गया क्वेरी स्ट्रिंग दिया।

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


सौभाग्य से, इसके बावजूद मुझे अपना कोड बदलने की आवश्यकता नहीं थी। मैं indexOf()प्रश्न चिह्न का पता लगाने के लिए उपयोग कर रहा था , इसलिए इसने पहली घटना की स्थिति को उठाया। फिर मैं प्रत्येक पर क्वेरी_परमीटर्स को विभाजित कर रहा हूं &और फिर प्रत्येक पर उनका नाम / मान जोड़े =
बंगल

जवाबों:


107

हाँ, यह मान्य है। URL में केवल पहले ? का ही महत्व है, किसी भी तरह से इसे शाब्दिक प्रश्न चिह्न माना जाता है:

क्वेरी घटक को पहले प्रश्न चिह्न ("?") वर्ण से दर्शाया गया है और एक संख्या चिह्न ("#") वर्ण या URI के अंत तक समाप्त किया गया है।

...

अक्षर स्लैश ("/") और प्रश्न चिह्न ("?") क्वेरी घटक के भीतर डेटा का प्रतिनिधित्व कर सकते हैं। सावधान रहें कि कुछ पुराने, गलत क्रियान्वयन इस तरह के डेटा को सही ढंग से नहीं संभाल सकते हैं जब इसका उपयोग रिश्तेदार संदर्भ (धारा 5.1) के लिए आधार यूआरआई के रूप में किया जाता है, जाहिर है क्योंकि वे पदानुक्रमित विभाजकों की तलाश में पथ डेटा से क्वेरी डेटा को भेद करने में विफल होते हैं। हालांकि, चूंकि क्वेरी घटकों का उपयोग अक्सर "की = वैल्यू" जोड़े के रूप में जानकारी की पहचान करने के लिए किया जाता है और एक बार उपयोग किया जाने वाला मूल्य दूसरे यूआरआई का संदर्भ होता है, इसलिए कभी-कभी उन वर्णों को एन्कोडिंग से बचने के लिए प्रयोज्य के लिए बेहतर होता है।

http://tools.ietf.org/html/rfc3986#section-3.4


9
तो क्या इसका मतलब है कि पहले क्वेरी पैरामीटर का नाम "? ब्लॉगिड" है और "ब्लॉगिड" नहीं? यह मजेदार हो सकता है ...
गांगेय

3
@GalacticCowboy - हाँ, वही बात मेरे साथ हुई। आप सही हैं - फायरबग पुष्टि करता है कि पहला क्वेरी पैरामीटर वास्तव में है ?blogid। यह वास्तव में एक गैर-आवश्यक पैरामीटर प्रतीत होता है, अर्थात पृष्ठ को किसी भी प्रश्न के अंक के साथ समान रूप से परोसा जाता है, या पैरामीटर को पूरी तरह से छोड़ दिया जाता है।
बंगल

26

एक tangentially संबंधित जवाब के रूप में, foo?spam=1?&eggs=3पैरामीटर spamमान देता है1?


हाँ। मामले में कोई .htaccessया समान चाल नहीं है। अगर हम इसमें बदलाव fooकरते हैं script.phpऔर यह अनुरोध करते हैं script.php?spam=1?&eggs=3तो var_dump($_GET)दिखाता हैarray(2) { ["spam"]=> string(2) "1?" ["eggs"]=> string(1) "3" }
हेबे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.