通常rails会对所有params
进行神奇解码。现在我收到了params="value="+encodeURIComponent('ab#cd');
的javascript,然后调用了http://server/controller?value=ab%23cd
。如果我在我的控制器中访问params[:value]
,它会包含ab%23cd
而不是ab#cd
,如我所料。
如何解决这个问题?为什么rails没有自动解码这个参数?
答案 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不会解码查询字符串。