URL参数中的“+”由空格替换

时间:2018-02-23 14:59:13

标签: ruby-on-rails ruby url

我向rails发了一个ajax请求。网址是:

/learners/-638284588?is_combined_page=true&email=test0221k+staging@tt.com&type=ld"

在日志中,我看到了这些条目:

Started GET "/learners/-638284588?is_combined_page=true&    email=test0221k+staging@rosettastone.com&type=lcd" for 127.0.0.1 at Fri Feb 23 09:31:56 -0500 2018
Processing by Extranet::LearnersController#show as HTML
Parameters: {"type"=>"ld", "email"=>"test0221k staging@tt.com", "is_combined_page"=>"true", "id"=>"-638284588"}
[WARNING] Audit logging has been enabled for Account
parameter ----------------> {"type"=>"lcd", "email"=>"test0221k staging@tt.com", "controller"=>"extranet/learners", "is_combined_page"=>"true", "action"=>"show", "id"=>"-638284588"} test0221k staging@tt.com

在网址中,email参数显示为:

email="test0221k+staging@tt.com"

,其中有+个符号。但是当我从params[:email]读取参数时,它打印为:

"email"=>"test0221k staging@tt.com"

其中+被空格替换。

为什么rails会用空格覆盖+? 如何避免此"test0221k staging@tt.com"并获取"test0221k+staging@tt.com"

1 个答案:

答案 0 :(得分:6)

这是由URL规范定义的。 Rails刚刚确认了该规范。

在将参数放入URL之前,需要对参数进行编码。这样做的简单方法是在JavaScript中调用encodeURIComponent()

表单会自动为您执行此编码。