2011-03-08 51 views
4

前一段時間,我已經注意到,編碼地圖name: value'application/x-www-form-urlencoded時,它呈現類似的東西(在這裏我使用Python):'application/x-www-form-urlencoded'和一個空值是什麼標準?

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

但是解析(至少與Python),只是去掉了對具有空值:

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

所以......它是標準行爲嗎?我在哪裏可以找到關於如何解析www-form-urlencoded的參考?我搜索了一段時間,找到了uris的RFC,W3c的表單文檔等等,但沒有說明如何處理空值。有人可以給我一個指針嗎?

回答

4

據我所知,這裏沒有「標準」。所描述的唯一事情(在html規範中,正如你發現的那樣)是瀏覽器應該如何編碼表單數據。你想要做什麼(或不做)具有空值取決於你。

注意urlparse.parse_qs()有一個可選的參數,keep_blank_values,使您可以控制它應如何處理那些:

>>> from urlparse import parse_qs 
>>> parse_qs('blabla=hihi&hello=', keep_blank_values=True) 
{'blabla': ['hihi'], 'hello': ['']} 
+0

感謝您的回答!我不知道這個「keep_blank_values」kwarg。你知道嗎 - 無論如何 - Django中是否有這樣的設置? – sebpiq 2011-03-08 10:27:51

+0

Doestn't Django已經爲'request.GET'和'request.POST'這樣做了嗎? – Steven 2011-03-08 11:01:20

+0

@Steven:好吧......我不這麼認爲,但我可能是錯的......雖然我很確定它不是 – sebpiq 2011-03-08 11:52:51

相關問題