Answers:
确实,没有定义的标准。要支持该信息,请在“ 查询字符串”一章中查看维基百科。有以下评论:
此外,当您查看RFC 3986的3.4 Query部分时,没有定义具有多个值的参数。
大多数应用程序使用您显示的第一个选项:http://server/action?id=a&id=b
。为了支持该信息,请查看此Stackoverflow链接和有关ASP.NET应用程序的MSDN链接,这些链接对具有多个值的参数使用相同的标准。
但是,由于您正在开发API,所以我建议您做最简单的事情,因为API的调用者在创建查询字符串时不会有太多麻烦。
id=a&id=b
布尔AND和id=a,b
布尔OR。
?id=5&id=3
。PHP在这里只会读取一个id值。如果我没记错的话,它必须看起来像这样才能与PHP一起使用:?id[]=5&id[]=3
since you are developing the APIs, I suggest you to do what is the easiest for you, since the caller of the API will not have much trouble creating the query string.
id=a,b
假定逗号,
是有效的定界符。但是您的参数值可以包含,
。然后,客户端需要转义,
查询参数值。但是您可以决定;
更好。这意味着客户端和服务器应共享API的官方分隔符。id=a&id=b
即使它使URL更长也不会出现此问题
我建议查看默认情况下浏览器如何处理表单。<select multiple>
例如,在w3schools中,查看一下form元素及其如何处理多个值。
<form action="/action_page.php">
<select name="cars" multiple>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
<input type="submit">
</form>
对于PHP使用:
<select name="cars[]" multiple>
如果从上方单击“ saab,opel”,然后单击“提交”,则将生成cars = saab&cars = opel的结果。然后,取决于后端服务器,参数cars应该作为可以进一步处理的数组出现。
希望这对寻求更“标准”方式处理此问题的人有所帮助。