HTTP GET 参数字符串的有效格式是什么?
我只经常使用以下格式:
something.php?key1=value1&key2=value2... etc
在我公司网站提供的 API 文档中,有以下示例:
something.php?some=thing=blah
。这有效吗?
很少见,我想我也见过这样的格式:
something.php?foo[]=bar&foo[]=fighters
查询组件是第一个问号
?
之后到片段标识符的字符串。其形式未指定,因此任何字符串都有效。
但是,事实上的默认格式是
application/x-www-form-urlencoded
。在此格式中,key=value
形式的键值对由 & 符号分隔 &
:
http://example.com?key1=value1&key2=value2
更具体地说,键和值由第一个等号分隔
=
:
key=value
=value
key
或key=
通常,特殊/保留字符和非 ASCII 字符应该是 百分比编码。理论上,由于等号在查询组件的上下文中并不特殊,因此可以不对其进行编码。因此,值可能包含字面上的等号。
带有键
key
和值 va=lue
的示例: ?key=va=lue
不同的后端可能会进一步指定格式。例如,PHP 自动将带有
key[]
的键值对理解为给定键的数组:
在 PHP 中为了方便起见,
key[]=value1&key[]=value2
将导致 $_GET
,如下所示:
array(
"key" => array(
0 => value1,
1 => value2
)
)
URL
对象根据URL标准解析URL。 searchParams
属性是根据查询组件根据application/x-www-form-urlencoded
格式创建的;对于大多数 Web 应用程序和 API 很有用。 “原始”查询组件(加上前导问号 ?
)可通过 search
属性访问。