2013-08-27 60 views
0

如何支持(如果有的話)向各種Web服務器發送具有相同名稱的查詢參數?即HTTP參數名稱必須是唯一的嗎?

<form ...> 
    <input name="a" value="va" /> 
    <input name="a" value="vb" /> 

大多數服務器會將此解釋爲數組還是將其中一個值破壞? 即,當訪問「a」時,PHP中的$ _REQUEST會返回一個數組嗎?或者這只是返回一個值?爲了支持這些輸入並返回一個數組,需要做所有(體面)Web服務器嗎?

+0

是關於HTTP或關於HTML的問題嗎? HTTP甚至沒有定義查詢字符串的格式(超出了開始(?)和結束(#)的方式)。 – EricLaw

+0

我的問題是針對HTTP。 – Steven

回答

0

按照W3C HTML 4.01 spec,複選框輸入控制至少允許共享相同的名稱,以便「允許用戶爲相同的屬性選擇多個值」(見17.2.1)。對於單選按鈕,實際上需要共享相同的名稱,以確定哪些屬於同一組。 (然而,這隻會導致一個值被髮送到服務器。)HTML 4規範似乎沒有說是否允許共享名稱用於其他輸入類型,但它應該與複選框相同。

HTML 5規範實際上明確指出section 4.10.1.3中的「多個控件可以具有相同的名稱」。鑑於HTML已經存在了很長一段時間,並且HTML 5規範與4沒有什麼不同,至少對於表單來說,我認爲可以肯定地說,大多數現代瀏覽器/服務器都將正確處理這種情況,而不是打破價值觀。當然,找出肯定的最好方法是在您關心的瀏覽器/服務器上自行嘗試。

2

答案完全取決於您使用的框架。當查詢URL參數的值時,某些框架會返回給定名稱的第一個參數。有些返回該名稱的最後一個參數。其他人返回以逗號分隔的名稱參數列表。還有一些人返回該名稱的參數字符串數組。

HTTP本身並沒有提供任何關於參數名稱唯一性的指導,甚至也沒有定義查詢字符串的格式。 a=b&c=d語法僅僅是HTML表單使用的一種約定,但其他格式完全合法,並且在某些情況下的確使用。

相關問題