是否有一个函数来在ruby

时间:2016-08-23 16:17:59

标签: ruby url

我需要在查询字符串中发送一封电子邮件作为参数。

我尝试的非标准功能是能够编码'。' (点)。

CGI.escape('my.fake@email.com')
 => "my.fake%40email.com" 

URI.escape('my.fake@email.com')
 => "my.fake@email.com" 

URI.encode('my.fake@email.com')
 => "my.fake@email.com" 

ERB::Util.url_encode('my.fake@email.com')
 => "my.fake%40email.com" 

我可以自己轻松地完成一项功能,但我只是想知道是否已有任何方法。

3 个答案:

答案 0 :(得分:2)

您实际上并不需要对点进行编码。在网址中?之后,/.没有任何特定含义。

答案 1 :(得分:1)

如同tadman指出here,如果路线类似于get "users/:email",则会遇到点问题。因为rails将点视为分隔符。正如the docs中所指出的那样,您需要添加一个约束:

get "users/:email", to: "users#show", constraints: { email: /.*/ }

由此你不需要在网址中逃脱点。

答案 2 :(得分:0)

您可以通过提供正则表达式作为URI.escape的第二个参数来转义通常无法转义的字符

URI.escape('a@b.c', /\./)
 => "a@b%2Ec"

(请注意,提供您自己的正则表达式会覆盖默认值,因此现在将.之外的任何内容都进行编码)