是否有通过查询字符串传递数组的标准方法?

明确起见,我有一个具有多个值的查询字符串,其中一个值将是数组值。我希望查询字符串值被视为数组-我不希望数组被分解,以便它与其他查询字符串变量难以区分。

另外,根据这篇文章的回答,作者建议不定义对数组的查询字符串支持。这准确吗?

编辑:

基于@Alex的回答,没有标准的方法来做到这一点,所以我的后续是什么是一个简单的方法来识别我正在阅读的参数是一个数组在PHP和Javascript?

将多个参数命名为相同的名称是否可以接受,这样我就知道它们属于一个数组?例子:

?myarray=value1&myarray=value2&myarray=value3...

或者这是一种不好的做法?


当前回答

注意,query-string模块列出了它支持的不同类型的数组编码(https://www.npmjs.com/package/query-string):

例如,{foo:['1', '2', '3']}可以被编码为:

'foo[]=1&foo[]=2&foo[]=3'
'foo[0]=1&foo[1]=2&foo[3]=3'
'foo=1,2,3'
'foo=1&foo=2&foo=3'
// Any custom separator can be used:
'foo=1|2|3'
// ... and more custom formats

这表明有很多解决方案被采用了……

其他回答

注意,query-string模块列出了它支持的不同类型的数组编码(https://www.npmjs.com/package/query-string):

例如,{foo:['1', '2', '3']}可以被编码为:

'foo[]=1&foo[]=2&foo[]=3'
'foo[0]=1&foo[1]=2&foo[3]=3'
'foo=1,2,3'
'foo=1&foo=2&foo=3'
// Any custom separator can be used:
'foo=1|2|3'
// ... and more custom formats

这表明有很多解决方案被采用了……

查询字符串携带文本数据,所以没有选择,只能分解数组,正确编码,并以您选择的表示格式传递:

p1 = value1&pN =家…… data = (value1,…,家) data = {p1: value1,…,pN:家}

然后在服务器端代码中解码。

虽然URL部分没有标准,但JavaScript或多或少有一个标准。

数组。方法返回以逗号分隔的项目字符串。

因此,如果你将包含数组的对象传递给URLSearchParams,并对其调用toString(),它将反过来对每个值调用toString,结果如下所示:

let data = {
  name: 'abc',
  values: ['abc', 123]
}

new URLSearchParams(data).toString();
// ?name=abc&values=abc,123 (with escaped comma characters)

这种格式很容易在前端序列化,也很容易在任何服务器上解析,而且无论上下文如何都很容易理解,所以它往往是我在url中发送数组数据的首选。

你在问题中提到了PHP和Javascript,但没有在标签中提到。我提出这个问题的目的是将一个数组传递给MVC。网行动。

我在这里找到了问题的答案:预期的格式是您在问题中提出的格式,多个参数具有相同的名称。

我使用React和Rails。我做了:

js

  let params = {
    filter_array: ['A', 'B', 'C']
  }

  ...

  //transform params in URI

  Object.keys(params).map(key => {
    if (Array.isArray(params[key])) {
      return params[key].map((value) => `${key}[]=${value}`).join('&')
    }
  }
  //filter_array[]=A&filter_array[]=B&filter_array[]=C