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

Bra*_*och 10 uri http url-encoding

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

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

// arrays
foo[]=bar
foo[]=baz
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*fer 6

URI 中的方括号

根据RFC-3986“统一资源标识符 (URI):通用语法”,不允许在 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 中关联数组的语言。