我需要在查询字符串中发送一封电子邮件作为参数。
我尝试的非标准功能是能够编码'。' (点)。
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"
我可以自己轻松地完成一项功能,但我只是想知道是否已有任何方法。
答案 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"
(请注意,提供您自己的正则表达式会覆盖默认值,因此现在将.
之外的任何内容都进行编码)