Нужно ли кодировать строки (например, URL), которые я передаю как параметр формы POST? - PullRequest
2 голосов
/ 01 октября 2009

Нужно ли кодировать строки (например, URL), которые я передаю как параметр формы POST?

Т.е. я хочу передать URL-адрес моего веб-приложения (ruby on rails) в качестве одного из параметров формы. Итак, есть ли потенциальные символы в URL / URI, которые нужно было бы закодировать? Или, возможно, рельсы справятся с этим в любом случае?

Ответы [ 3 ]

3 голосов
/ 01 октября 2009

Нужно ли кодировать строки (например, URL), которые я передаю как параметр формы POST?

Это зависит от того, что вы используете для создания / отправки вашего запроса POST. Если вы сами создаете тело запроса, то да, вам придется кодировать URL-адрес каждого параметра:

POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded

foo=bar&url=http://www.example.com/url?innerparameter1=1&innerparameter2=2

это нехорошо: innerparameter2 на самом деле является параметром внешней закодированной строки. Для этого потребуется кодировка, которая будет выглядеть так:

foo=bar&url=http%3A//www.example.com/url%3Finnerparameter1%3D1%26innerparameter2%3D2

Если, однако, вы используете что-то более высокого уровня для выполнения запроса POST и передаете какое-то отображение строк параметров, я ожидаю, что этот компонент позаботится о кодировке URL для вас.

Код

1 голос
/ 11 февраля 2015

Как упоминает bobince, вам необходимо кодировать любые передаваемые вами данные в качестве параметров URL. Часто любая библиотека, которую вы используете, позаботится об этом. Это относится ко всем HTTP-запросам.

Например, API имеет конечную точку GET /sites/:name. При использовании cURL это должно выглядеть как

curl http://example.com/sites/google%2Ecom

В Ruby / Rails вы можете использовать URI.encode и URI.decode:

>> URI.encode('google.com', /\W/)
"google%2Ecom"
>> URI.decode('google%2Ecom')
"google.com"
0 голосов
/ 01 октября 2009

Как правило, если вы отправляете программные или пользовательские данные на страницу HTML, вы должны закодировать их для HTML. Имейте в виду, что URL-адреса часто имеют символ &, и их следует кодировать, даже если браузеры, кажется, справляются с этим.

Я не Ruby парень, поэтому я не знаю, как вы это делаете в Ruby, и я не знаком с Ruby on Rails, чтобы сказать, будет ли он это делать (хотя я был бы немного удивлен этим) , но рекомендация, которую я предлагаю, не зависит от языка.

...