Parameters 如何在Sinatra中解码路由参数?

Parameters 如何在Sinatra中解码路由参数?,parameters,routes,sinatra,decode,Parameters,Routes,Sinatra,Decode,我实施了一个简单的路线: get '/test' do params end 当我在没有编码参数的情况下调用它时,比如 /test?plip=plop => ["plip", "plop"] 我能够毫无问题地检索我的参数 但是,对于编码参数: /test?plip%3Dplop => ["plip=plop", nil] 键/值不再匹配。 我们有解决这个问题的办法吗 提前谢谢。由于查询值可以编码(如果它们包含影响解析的字符,则应该编码),因此应用程序不应该以=的形式接收

我实施了一个简单的路线:

get '/test' do
    params
end
当我在没有编码参数的情况下调用它时,比如

/test?plip=plop
=> ["plip", "plop"]
我能够毫无问题地检索我的参数

但是,对于编码参数:

/test?plip%3Dplop
=> ["plip=plop", nil]
键/值不再匹配。 我们有解决这个问题的办法吗


提前谢谢。

由于查询值可以编码(如果它们包含影响解析的字符,则应该编码),因此应用程序不应该以
=
的形式接收一个
%3D
,它是查询字符串的一部分,而不仅仅是一个查询值。为您处理查询字符串的解析,因此您需要担心的是,在您的示例中,
params[“plip”]
的值是否需要解码,但我认为您甚至不需要担心,如下例所示:

require 'sinatra'

get '/' do
  params.inspect
end
我通过IRB获得CGI编码的字符串:

URI.encode "https://stackoverflow.com/questions/28987085/how-to-decode-route-parameters-in-sinatra"
=> "https://stackoverflow.com/questions/28987085/how-to-decode-route-parameters-in-sinatra"
然后我运行应用程序并检查输出(注意,在我的终端的
curl
调用中有一些额外的转义字符,它们在运行
curl
时被删除,所以忽略这些字符):

从最终输出可以看出,传入参数已为您解码:


{“plip”=>“https://stackoverflow.com/questions/28987085/how-to-decode-route-parameters-in-sinatra“}%

为什么要对它们进行编码?事实上,我不需要对它们进行编码,只是为了以防万一我收到编码的参数。我认为你是对的。不应对“=”进行编码。在这种情况下,我不再有问题了。:)谢谢你的帮助。@M07很高兴能帮上忙。
$ curl http://localhost:4567/
127.0.0.1 - - [14/Mar/2015:12:10:03 +0900] "GET / HTTP/1.1" 200 2 0.0045
localhost - - [14/Mar/2015:12:10:03 JST] "GET / HTTP/1.1" 200 2
- -> /
{}%   

$ curl http://localhost:4567/\?plip\=plop
127.0.0.1 - - [14/Mar/2015:12:10:25 +0900] "GET /?plip=plop HTTP/1.1" 200 16 0.0005
localhost - - [14/Mar/2015:12:10:25 JST] "GET /?plip=plop HTTP/1.1" 200 16
- -> /?plip=plop

$ curl http://localhost:4567/\?plip\=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F28987085%2Fhow-to-decode-route-parameters-in-sinatra
127.0.0.1 - - [14/Mar/2015:12:11:51 +0900] "GET /?plip=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F28987085%2Fhow-to-decode-route-parameters-in-sinatra HTTP/1.1" 200 98 0.0005
localhost - - [14/Mar/2015:12:11:51 JST] "GET /?plip=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F28987085%2Fhow-to-decode-route-parameters-in-sinatra HTTP/1.1" 200 98
- -> /?plip=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F28987085%2Fhow-to-decode-route-parameters-in-sinatra
{"plip"=>"https://stackoverflow.com/questions/28987085/how-to-decode-route-parameters-in-sinatra"}%