Как этот URL будет декодироваться — путаница в базовом Http Get

#ruby-on-rails #http #url #encoding #parameter-passing

#ruby-on-rails #http #url #кодирование #передача параметров

Вопрос:

В принципе, мне нужно передать три параметра http как get. Вот параметры

 param1 = 3
param2 = 454
param3 = http://localhost:3000/another_test?another_param=4amp;another_param2=978
  

Это преобразуется в

 http://localhost:3000/test?param1=3amp;param2=454amp;param3=http://localhost:3000/another_test?another_param=4amp;another_param2=978
  

Я просто не понимаю, правильно ли сформирован URL или нет. Сработает ли это или есть какой-либо другой способ сделать это. Я использую Rails. Я выполнил декодирование и нажал на ссылку, и я все еще вижу указанный выше URL-адрес. Будет ли это работать на стороне получателя, то есть будет ли оно декодировано так, как я предполагал.

Пожалуйста, посоветуйте.

Ответ №1:

Это должно работать до тех пор, пока вы по URL кодируете параметры. В этом случае amp; и ? будут преобразованы, что позволит Rails различать параметры строки запроса и разделители строк запроса.

Чтобы убедиться, что он закодирован, вы можете использовать Rack::Utils.escape или Hash#to_query .

Ответ №2:

Это будет декодировано как:

 param1=3
param2=454
param3=http://localhost:3000/another_test?another_param=4
another_param2=978
  

Вам нужно закодировать param3 или, как минимум, заменить амперсанды в нем на правильную кодировку URL, чтобы он снова соответствовал вашим входным параметрам.