कुछ समय पहले, मैंने देखा था कि name: value को 'application/x-www-form-urlencoded में एन्कोड करते समय, यह कुछ इस तरह प्रस्तुत करता है (यहां मैं पायथन का उपयोग करता हूं):

>>> from urllib import urlencode
>>> urlencode({'hello': '', 'blabla': 'hihi'})
'blabla=hihi&hello='

लेकिन पार्सिंग (कम से कम पायथन के साथ), केवल उन जोड़ों को हटा देता है जिनके पास खाली मान है:

>>> from urlparse import parse_qs
>>> parse_qs('blabla=hihi&hello=')
{'blabla': ['hihi']}

तो ... क्या यह मानक व्यवहार है? www-form-urlencoded को कैसे पार्स किया जाना चाहिए, इसका संदर्भ मुझे कहां मिल सकता है? मैंने थोड़ी देर के लिए गुगल किया है, यूरिस के लिए आरएफसी, फॉर्म के लिए डब्ल्यू 3 सी दस्तावेज़, और इसी तरह के बारे में कुछ भी नहीं है लेकिन खाली मूल्यों का इलाज कैसे किया जाना चाहिए। क्या कोई मुझे इसका सूचक दे ​​सकता है ???

4
sebpiq 8 मार्च 2011, 11:46

1 उत्तर

सबसे बढ़िया उत्तर

जहाँ तक मुझे पता है, इसके लिए कोई "मानक" नहीं है। केवल एक चीज जो वर्णित है (एचटीएमएल स्पेक में, जैसा कि आपको पता चला है), यह है कि ब्राउज़र को फॉर्म डेटा को कैसे एन्कोड करना चाहिए। आप खाली मूल्यों के साथ क्या करना चाहते हैं (या नहीं) आप पर निर्भर है।

ध्यान दें कि urlparse.parse_qs() में एक वैकल्पिक पैरामीटर है, keep_blank_values जो आपको यह नियंत्रित करने की अनुमति देता है कि इसे कैसे संभालना चाहिए:

>>> from urlparse import parse_qs
>>> parse_qs('blabla=hihi&hello=', keep_blank_values=True)
{'blabla': ['hihi'], 'hello': ['']}
4
Steven 8 मार्च 2011, 13:07
जवाब के लिए धन्यवाद !! मुझे यह "keep_blank_values" kwarg नहीं पता था। क्या आप जानते हैं - किसी भी मौके से - अगर उसके लिए Django में कोई सेटिंग है?
 – 
sebpiq
8 मार्च 2011, 13:27
क्या Django पहले से ही request.GET और request.POST के लिए ऐसा नहीं करता है?
 – 
Steven
8 मार्च 2011, 14:01
: ठीक है ... मुझे विश्वास नहीं है, लेकिन मैं गलत हो सकता हूं ... हालांकि मुझे पूरा यकीन है कि यह नहीं है
 – 
sebpiq
8 मार्च 2011, 14:52
मैं स्वयं django का उपयोग नहीं कर रहा हूं, इसलिए मुझे यकीन नहीं है, लेकिन ये SO प्रश्न इंगित करते हैं कि यह करता है: stackoverflow .com/questions/3500859/django-request-get और stackoverflow.com/questions/2422055/…
 – 
Steven
8 मार्च 2011, 18:53
: ठीक है ... मेरी गलती आप सही थे, मैंने Django के साथ भी जांच की, और वास्तव में पैरामीटर छीन नहीं गए हैं। हालाँकि, जिस चीज़ से मुझे शुरुआत हुई, वह यह है कि 'सेलेक्ट मल्टीपल' के साथ, अगर कुछ भी नहीं चुना जाता है, तो पैरामीटर नहीं भेजा जाता है। हालांकि यह सर्वर की बजाय क्लाइंट की समस्या है।
 – 
sebpiq
9 मार्च 2011, 10:57