Поскольку значения запроса могут быть закодированы (и должны, если они содержат символы, которые влияют на синтаксический анализ), тогда не должно быть времени, когда приложение получает =
в качестве %3D
, которое должно быть частью строки запроса и а не просто значение запроса. Rack обрабатывает разбор строк запроса для вас, поэтому все, о чем вам нужно беспокоиться, заключается в том, нужно ли в вашем примере присвоить значение из params["plip"]
, но я не думаю, что вам даже нужно беспокоиться об этом, так как следующий пример показывает:
require 'sinatra'
get '/' do
params.inspect
end
Я получаю CGI закодированной строки с помощью IRB:
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
выполняются так игнорировать те):
$ 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"}%
Как вы можете видеть из конечной продукции, входящий параметр был декодируются для вас:
{"plip"=>"https://stackoverflow.com/questions/28987085/how-to-decode-route-parameters-in-sinatra"}%
почему вы их кодирующим? – iain
На самом деле, мне не нужно их кодировать, но на всякий случай я получаю закодированные параметры. – M07