Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用多个重复密钥对参数进行编码_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 使用多个重复密钥对参数进行编码

Ruby on rails 使用多个重复密钥对参数进行编码,ruby-on-rails,ruby,Ruby On Rails,Ruby,我似乎和这家伙有同样的问题 我想对一些参数进行编码(对于import.io api)。实际上: params = { :input => "webpage/url:http://www.example.com", :input => "keywords:some+keywords" } 但这行不通,所以我认为这是正确的方法: params = { :input => ["webpage/url:http://www.example.com", "keywords:so

我似乎和这家伙有同样的问题

我想对一些参数进行编码(对于import.io api)。实际上:

params = {
  :input => "webpage/url:http://www.example.com",
  :input => "keywords:some+keywords"
}

但这行不通,所以我认为这是正确的方法:

params = { :input => ["webpage/url:http://www.example.com", "keywords:some+keywords"] }
我想让它输出

params.to_query
=> "input=webpage%2Furl%3Ahttp%3A%2F%2Fwww.example.com%2Fsome-id&input=keywords%3Asome%2Bkeywords"
不幸的是,我

"input%5B%5D=webpage%2Furl%3Ahttp%3A%2F%2Fwww.example.com%2Fsome-id&input%5B%5D=keywords%3Asome%2Bkeywords"
它在输入之后添加[],我认为这是标准行为。我怎样才能阻止它这样做


为了澄清,ruby或“rails”是如何处理需要重复键的url参数的

url中的某些字符对url的处理具有特殊重要性:它们是保留的,就像编程语言中的关键字一样。看

如果您尝试使用这些作为参数的名称或值,它将破坏uri,并且您将很难预测您所看到的结果

答案是URI转义字符串,它将用编码版本替换特殊字符。Rails在收到请求时会自动取消对它们的扫描,因此您无需担心

您可以手动对它们进行转义,但如果已经将它们作为散列进行了转义,那么最好的方法是在散列上调用
.to_param

params = { :input => ["webpage/url:http://www.example.com", "keywords:some+keywords"] }
=> {:input=>["webpage/url:http://www.example.com", "keywords:some+keywords"]}
params.to_param
=> "input%5B%5D=webpage%2Furl%3Ahttp%3A%2F%2Fwww.example.com&input%5B%5D=keywords%3Asome%2Bkeywords"

遇到了一个类似的问题,这里有一个有用的帖子,但很简单

params = {}.compare_by_identity
params['input'] = "webpage/url:http://www.example.com"
params['input'.dup] = "keywords:some+keywords"
然后

返回

"input=keywords%3Asome%2Bkeywords&input=webpage%2Furl%3Ahttp%3A%2F%2Fwww.example.com"

你为什么要阻止它这么做?这是一个有效的查询参数
[]
是在参数中处理数组的方式。如果希望最终结果与开始参数相同,则需要这些[],问题是我不能同时调用这两个参数“input”,因为散列只会覆盖自身。。我需要一种传递给值的方法,这两种方法都使用键“input”传递给一组查询参数,我将把这些参数传递给URL。。。我肯定是的,但它破坏了api。i、 e.api不会将其视为有效参数。接受具有重复键的变量是非常愉快的。不是我的API,所以除了遵循它们的规则之外,我不能做任何事情……是的,输入应该作为一个值数组发送。这就是我们发送多个值的方式。如果你的API不接受它,那就太愚蠢了。你确定是这样吗?我们可以建议黑客解决方法,但对API一无所知,很难给出建议。是的,我想我误解了他的要求。我想你已经意识到,问题不在于参数被编码。那很好。它是在变量输入之后添加数组参数。
"input=keywords%3Asome%2Bkeywords&input=webpage%2Furl%3Ahttp%3A%2F%2Fwww.example.com"