Encodeuricomponent 在 rails 中对其进行解码

gor*_*tde 4 javascript ajax url encoding ruby-on-rails

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

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

Gav*_*ler 5

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

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

GET http://server/controller?value=ab%23cd
  On the server this will generate params['value'] as ab#cd
Run Code Online (Sandbox Code Playgroud)

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

POST http://server/controller?value=ab%23cd
  On the server this will generate params['value'] as ab%23cd
Run Code Online (Sandbox Code Playgroud)

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

POST http://server/controller
  data: value=ab%23cd
  On the server this will generate params['value'] as ab#cd
Run Code Online (Sandbox Code Playgroud)

我怀疑您看到此问题是因为您在POST请求中包含查询字符串而不是GET请求,因此 Rails 没有解码查询字符串。