在历史的某个时刻,服务器端语言开始调整urlencoded参数,以添加对作为数组和键/值对象提交数据的支持:
// key/value pairs
contact[name]=John
contact[phone]=800-555-1234
// arrays
foo[]=bar
foo[]=baz
我在一个库的嵌套参数解析中玩一些边缘情况,例如保存参数顺序。是否存在规范服务器应如何处理此编码的规范?如果没有,哪个参考实现引入了这种语法?
答案 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
。这些框架也允许在键中使用方括号,但它没有区别,它们只是名称的一部分。很少支持关联数组。 (警告:我不熟悉所有这些语言。)
到目前为止,PHP是我发现的唯一一种语言,它支持没有自定义代码的URL中的关联数组。
答案 1 :(得分:0)
http_build_query
已经在PHP中使用了很长时间。可能是这样的。 https://php.net/http_build_query