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