2013-08-27 38 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表单使用的一种约定,但其他格式完全合法,并且在某些情况下的确使用。

相关问题