是否有嵌套urlencoded params []的规范?

时间:2015-05-15 14:04:38

标签: http uri url-encoding

在历史的某个时刻,服务器端语言开始调整urlencoded参数,以添加对作为数组和键/值对象提交数据的支持:

// key/value pairs
contact[name]=John
contact[phone]=800-555-1234

// arrays
foo[]=bar
foo[]=baz

我在一个库的嵌套参数解析中玩一些边缘情况,例如保存参数顺序。是否存在规范服务器应如何处理此编码的规范?如果没有,哪个参考实现引入了这种语法?

2 个答案:

答案 0 :(得分:3)

URI中的方括号

根据RFC-3986 "Uniform Resource Identifier (URI): Generic Syntax",不允许在URI中使用未编码的方括号。因此,它不是HTTP标准。

  

由Internet协议文字地址(版本6 [RFC3513]或更高版本)标识的主机通过将IP文本括在方括号(“[”和“]”)中来区分。这是URI语法中唯一允许使用方括号字符的地方。

许多编程语言都使用方括号作为数组,因此我猜在URI中使用方括号是一种自然结转。

  

是否有规范说明服务器应如何处理此编码?

不,至少不是语言独立。

首次实施

许多Web应用程序框架允许在查询中重用相同的键来创建数组,例如http://example.org/?foobar=hello&foobar=world。这些框架也允许在键中使用方括号,但它没有区别,它们只是名称的一部分。很少支持关联数组。 (警告:我不熟悉所有这些语言。)

  • Perl,1987:支持编号数组,但不支持关联数组。
  • PHP,1995:支持编号数组和关联数组。
  • Active Server Pages(ASP),1996:支持编号数组,但不支持关联数组。
  • JavaServerPages(JSP),1999:支持编号数组,但不支持关联数组。
  • JAX-RS(Java),2008:支持编号数组,但不支持关联数组。

到目前为止,PHP是我发现的唯一一种语言,它支持没有自定义代码的URL中的关联数组。

答案 1 :(得分:0)

http_build_query已经在PHP中使用了很长时间。可能是这样的。 https://php.net/http_build_query