我是否需要对作为 POST 表单参数传递的字符串(例如 URL)进行编码?
即,我想将我必须的 URL 作为表单参数之一传递给我的 Web 应用程序(ruby on rails)。那么 URL/URI 中是否有任何潜在的字符需要编码?或者也许rails会处理这个?
我是否需要对作为 POST 表单参数传递的字符串(例如 URL)进行编码?
即,我想将我必须的 URL 作为表单参数之一传递给我的 Web 应用程序(ruby on rails)。那么 URL/URI 中是否有任何潜在的字符需要编码?或者也许rails会处理这个?
我是否需要对作为 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 编码。
代码?
正如 bobince 所提到的,您需要对作为 URL 参数传递的任何数据进行编码。通常,您使用的任何库都会处理此问题。这适用于所有 HTTP 请求顺便说一句。
例如,一个 API 有一个端点GET /sites/:name
。使用 cURL 它应该看起来像
curl http://example.com/sites/google%2Ecom
在 Ruby/Rails 中,您可以使用URI.encode
and URI.decode
:
>> URI.encode('google.com', /\W/)
"google%2Ecom"
>> URI.decode('google%2Ecom')
"google.com"
作为一般性声明,如果您向 HTML 页面发出编程或用户输入数据,您应该将其编码为 HTML。请记住,URL 通常带有 & 字符并且应该被编码,即使浏览器似乎可以处理它。
我不是一个 Ruby 人,所以我不知道你是如何在 Ruby 中做到这一点的,我也不熟悉 Ruby on Rails 说它是否会做到这一点(尽管我会对此有点惊讶),但是我建议的准则不是特定于语言的。