Encodeuricomponent在rails中解码它

时间:2012-10-23 20:35:40

标签: javascript ruby-on-rails ajax url encoding

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

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

1 个答案:

答案 0 :(得分:3)

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不会解码查询字符串。