यदि कोई मान नहीं है, तो क्या कोई url क्वेरी पैरामीटर मान्य है?


138

क्या कोई url http://example.com/foo?barमान्य है?

मैं कुछ आधिकारिक के लिंक की तलाश कर रहा हूं जो एक तरह से या दूसरे तरीके से कहता है। एक साधारण हाँ / कोई जवाब या उपाख्यानात्मक साक्ष्य इसमें कटौती नहीं करेगा।


3
URI RFC के अलावा मैं इसका एक वास्तविक विश्व उदाहरण बताना चाहता हूं। Drupal कैश लिंक के रूप में कुछ लिंक में इन वैधता क्वेरी मापदंडों का उपयोग करता है। जैसे www.google-analytics.com/analytics.js?o490ub या /themes/seven/ie.css?o4eppb। आप शायद यह पहले से ही जानते हैं, लेकिन इस पर कुछ ठोकर नहीं हो सकता है।
एलियाह लिन

जवाबों:


103
  • URI RFC को मान्य
  • आपके सर्वर-साइड फ्रेमवर्क / कोड के लिए संभवतः स्वीकार्य है

यूआरआई आरएफसी क्वेरी स्ट्रिंग के लिए एक प्रारूप जनादेश नहीं है। यद्यपि यह माना जाता है कि क्वेरी स्ट्रिंग अक्सर नाम-मूल्य जोड़े को ले जाएगा, इसकी आवश्यकता नहीं है (जैसे कि इसमें अक्सर एक और URI होगा)।

3.4। सवाल

क्वेरी घटक में गैर-पदानुक्रमित डेटा होता है, जो पथ घटक (धारा 3.3) में डेटा के साथ, URI की योजना और नामकरण प्राधिकरण (यदि कोई हो) के दायरे में एक संसाधन की पहचान करने का कार्य करता है। ...

... हालाँकि, जैसा कि क्वेरी घटकों का उपयोग अक्सर "कुंजी = मूल्य" जोड़े के रूप में जानकारी की पहचान करने के लिए किया जाता है और एक बार उपयोग किया जाने वाला मूल्य किसी अन्य यूआरआई के संदर्भ में होता है, ...

HTML स्थापित करता है कि HTTP GET के माध्यम से सबमिट किया गया एक फॉर्म "मान 1 = value1 & key2 = value2 ..." (ठीक से एन्कोडेड) रूप में मान मान युग्म के रूप में मानों को एनकोड करना चाहिए। क्वेरी स्ट्रिंग का पार्सिंग सर्वर-साइड कोड (जैसे जावा सर्वलेट इंजन) पर निर्भर है।

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


7
ASP.NET MVC (मेरी जानकारी के लिए संस्करण ४ और ५) निश्चित रूप से कोई मूल्य प्रदान नहीं किए जाने पर चोक कर देता है :(
एआर

2
isindexजादू nameएचटीएमएल 5 से कुंजी और मान के प्रारूप के बिना एक क्वेरी स्ट्रिंग भेजने की अनुमति देता है stackoverflow.com/a/37579004/895245
सिरो Santilli郝海东冠状病六四事件法轮功


80

वे पूरी तरह से मान्य हैं। आप उन्हें बड़े संदेशवाहक के बराबर मान सकते हैं जो भीड़ दूत के पीछे चुपचाप खड़े थे। आदमी का कोई नाम नहीं है और वह बोलता नहीं है, लेकिन उसकी उपस्थिति केवल जानकारी देती है।


19
डकैत के मांस वाले लड़के का एक नाम है, आप इसे नहीं जानते हैं। आप इसे परम पर जानते हैं, हालांकि यह मूल रूप से एक बूलियन मूल्य (वर्तमान, अनुपस्थित) वहन करती है।
वलासेक

2
इसका वर्णन करने का सबसे अच्छा तरीका :)
मोहम्मद करमानी

1
बड़े लड़के का नाम चीच है , जो स्टार ट्रेक पर कैसीनो कैसीनो प्रकरण से है: डीप स्पेस 9.
एंथनी रुतलेज

8

"Http" योजना का उपयोग HTTP प्रोटोकॉल के माध्यम से नेटवर्क संसाधनों का पता लगाने के लिए किया जाता है। यह अनुभाग http URL के लिए स्कीम-विशिष्ट सिंटैक्स और शब्दार्थ को परिभाषित करता है। " http://www.w3.org/Protocols/rfc2616/rfc2616.html

http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]] 

तो हाँ, प्रश्न चिह्न के बाद कुछ भी मान्य है। आपका सर्वर अलग तरह से व्याख्या कर सकता है, लेकिन वास्तविक रूप से , आप कुछ भाषाओं को एक बूलियन मान के रूप में देख सकते हैं जो कि सूचीबद्ध होने पर सही है।


6
औपचारिक परिभाषा के लिए, RFC 2396 ( ietf.org/rfc/rfc2396.txt ) देखें, जो क्वेरी स्ट्रिंग की सामग्री पर चुप है, वर्णों के कानूनी सेट को निर्दिष्ट करने के अलावा, और जिनके विशेष अर्थ हैं। विशेष रूप से, यह कहता है कि "क्वेरी घटक संसाधन द्वारा व्याख्या की जाने वाली जानकारी का एक तार है," इसका मतलब यह है कि इसकी परिभाषा प्रोटोकॉल पर निर्भर है, और इस प्रकार कुंजी = मान काफी हद तक सम्मेलन द्वारा है।
रॉबर्टबी

6

हां, यह मान्य है।

अगर कोई बस यह जांचना चाहता है कि पैरामीटर मौजूद है या नहीं, तो ऐसा करने का यह एक तरीका है।


4

URI युक्ति

यूआरआई युक्ति का एकमात्र प्रासंगिक हिस्सा यह जानना है कि पहले ?और पहले के बीच सब कुछ# एक क्वेरी की युक्ति की परिभाषा के अनुसार है। इसमें कोई भी वर्ण शामिल हो सकते हैं जैसे कि [:/.?]। इसका मतलब है कि एक क्वेरी स्ट्रिंग जैसे कि ?bar, या ?ten+green+applesमान्य है।

यहां RFC 3986 का पता लगाएं

HTML कल्पना

isindex HTML5 सार्थक रूप से नहीं है।

यह केवल एक रूप में पहले तत्व के रूप में उपयोग के लिए पदावनत प्रदान किया जाता है, और एक नाम के बिना प्रस्तुत करता है।

यदि प्रविष्टि का नाम "isindex" है, तो इसका प्रकार "टेक्स्ट" है, और यह प्रपत्र डेटा सेट में पहली प्रविष्टि है, फिर मान को परिणामित करें और इस प्रविष्टि के बाकी सभी विकल्पों को छोड़ दें, अगले पर जा रहे हैं प्रविष्टि, यदि कोई हो, या समग्र एल्गोरिथ्म में अगला कदम अन्यथा।

आइंडेक्स ध्वज केवल विरासत उपयोग के लिए है। HTML दस्तावेज़ों के अनुरूप होने वाले फ़ॉर्म उन पेलोड को उत्पन्न नहीं करेंगे जिन्हें इस ध्वज सेट के साथ डीकोड करने की आवश्यकता है।

पिछली बार थाindex समर्थित HTML3 था । एचटीएमएल 5 में इसका उपयोग आसान बैकवर्ड संगतता प्रदान करने के लिए है।

पुस्तकालयों में समर्थन

यूआरआई के इस प्रारूप के लिए पुस्तकालयों में समर्थन भिन्न होता है, हालांकि कुछ पुस्तकालय उपयोग को आसान बनाने के लिए विरासत का समर्थन प्रदान करते हैं isindex

पर्ल URI.pm (विशेष समर्थन)

पर्ल के यूआरआई जैसे कुछ पुस्तकालय इस तरह की संरचनाओं को पार्स करने के तरीके प्रदान करते हैं

$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.

Node.js url(कोई विशेष समर्थन नहीं)

एक और अधिक लगातार उदाहरण के रूप में, node.jsसामान्य मार्ग लेता है और या तो पार्सिंग को आसान बनाता है

  • एक स्ट्रिंग
  • या, कुंजियों और मूल्यों की एक वस्तु (उपयोग करके parseQueryString)

कुछ इसी तरह के कुछ अन्य URI- पार्सिंग एपीआई।



3

isindexnameHTML5 से पदावनत जादू

यह पदावनत फीचर एक फॉर्म जमा करने की अनुमति देता है, जिससे एक URL उत्पन्न होता है, जिससे यह अधिक साक्ष्य मिलता है कि यह HTML के लिए मान्य है। उदाहरण के लिए:

<form action="#isindex" class="border" id="isindex" method="get">
  <input type="text" name="isindex" value="bar"/>
  <button type="submit">Submit</button>
</form>

एक प्रकार का URL बनाता है:

?bar

मानक: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-n- त्याग

isindexहालाँकि, जैसा कि यहां बताया गया है: https://stackoverflow.com/a/41689431/895245


1

जैसा कि वर्णित अन्य सभी उत्तर हैं, यह पूरी तरह से जाँच के लिए मान्य है, विशेष रूप से बूलियन प्रकार के सामान के लिए

यहाँ नाम से क्वेरी स्ट्रिंग प्राप्त करने के लिए एक सरल कार्य है:

function getParameterByName(name, url) {
    if (!url) {
        url = window.location.href;
    }
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

और अब आप जांचना चाहते हैं कि आपके द्वारा खोजा जा रहा क्वेरी स्ट्रिंग मौजूद है या नहीं, आप एक साधारण काम कर सकते हैं जैसे:

var exampleQueryString = (getParameterByName('exampleQueryString') != null);

exampleQueryStringहो जाएगाfalse यदि फ़ंक्शन क्वेरी स्ट्रिंग नहीं ढूँढ सकता है, अन्यथा होगा true

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