3

我是否需要对作为 POST 表单参数传递的字符串(例如 URL)进行编码?

即,我想将我必须的 URL 作为表单参数之一传递给我的 Web 应用程序(ruby on rails)。那么 URL/URI 中是否有任何潜在的字符需要编码?或者也许rails会处理这个?

4

3 回答 3

3

我是否需要对作为 POST 表单参数传递的字符串(例如 URL)进行编码?

这取决于您用来创建/发送 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 编码。

代码?

于 2009-09-30T23:51:00.440 回答
1

正如 bobince 所提到的,您需要对作为 URL 参数传递的任何数据进行编码。通常,您使用的任何库都会处理此问题。这适用于所有 HTTP 请求顺便说一句。

例如,一个 API 有一个端点GET /sites/:name。使用 cURL 它应该看起来像

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

在 Ruby/Rails 中,您可以使用URI.encodeand URI.decode

>> URI.encode('google.com', /\W/)
"google%2Ecom"
>> URI.decode('google%2Ecom')
"google.com"
于 2015-02-11T14:49:27.897 回答
0

作为一般性声明,如果您向 HTML 页面发出编程或用户输入数据,您应该将其编码为 HTML。请记住,URL 通常带有 & 字符并且应该被编码,即使浏览器似乎可以处理它。

我不是一个 Ruby 人,所以我不知道你是如何在 Ruby 中做到这一点的,我也不熟悉 Ruby on Rails 说它是否会做到这一点(尽管我会对此有点惊讶),但是我建议的准则不是特定于语言的。

于 2009-09-30T23:36:09.517 回答