4

通常 rails 会神奇地解码所有params. 现在我得到了一个 javascript,它执行params="value="+encodeURIComponent('ab#cd');然后调用http://server/controller?value=ab%23cd. 如果我params[:value]在我的控制器中访问,它包含ab%23cd而不是ab#cd我所期望的。

如何解决这个问题?为什么rails没有自动解码这个参数?

4

1 回答 1

5

Rails 使用以下逻辑“自动”处理参数。

如果请求是 GET,它将解码查询字符串中的任何内容:

GET http://server/controller?value=ab%23cd
  On the server this will generate params['value'] as ab#cd

如果请求是带有查询字符串的 POST,则不会对其进行解码:

POST http://server/controller?value=ab%23cd
  On the server this will generate params['value'] as ab%23cd

如果请求是带有数据参数的 POST,它将对其进行解码:

POST http://server/controller
  data: value=ab%23cd
  On the server this will generate params['value'] as ab#cd

我怀疑你看到这个问题是因为你包含了一个带有POST请求而不是GET请求的查询字符串,所以 Rails 没有解码查询字符串。

于 2013-06-28T14:49:09.773 回答