Ruby on Rails 中的 URL 编码等价物

51

在Ruby on Rails 2.3.5中是否有与PHP的urlencode等效的函数?(它将字符串编码以在URL的查询部分中使用)

我搜索了一下,但所有的答案似乎都可以追溯到2006年之前,而且看起来已经过时了。

这是我找到的资料。在视图中调用CGI::escape有点不太正常。

是否有类似的帮助函数呢?

谢谢!

4个回答

98

不是的。PHP的urlencode(参见http://php.net/urlencode)会将空格等字符转换为“%20”。 - Matchu
啊!还没有机会使用那个帮助程序!SO不让我更改投票,因为它似乎认为你的答案没有被编辑;我会在几分钟后再来检查是否有变化。 - Matchu
1
希望能提供'u'方法的文档链接。看起来它是'url_encode'的缩写。 - Paweł Gościcki
10
url_encode是一个来自ERB::Util模块的Ruby核心方法。在这个方法中,uurl_encode的别名。 - FilipK
@FilipK 当你在Rails API文档中搜索url_encode时,为什么没有出现结果?http://api.rubyonrails.org/ - Chloe

67

如果你不想使用ERB,你可以使用以下代码:

Rack::Utils.escape('http://example.com')
#=> "http%3A%2F%2Fexample.com"

这也会将/进行转换。


2
显然,不要在视图中使用此代码,但这个回答帮助我进行了谷歌搜索并找到了这里 :) - davetron5000

41

这对我来说比使用Rack::Utils.escape更有效:

URI::escape('http://example.com/?param=Hello World')

它用%20代替了空格而不是+

但它不会替换/


1
URI::escape似乎有不同的用途。例如,它不会将“,”和“:”替换为“%2C”和“%3A”,也不会将“/”替换为“%2F”。而Rack::Utils则会这样做。 - Abdo
9
@Abdo 我认为URI::escape适用于将URI插入HTML属性时使用。例如:它会转义实体,这些实体在像这样使用时 href="<%= ... %>" 会引起问题,例如 ", <>。Rack::Utils.escape是在内容将被插入URI中时使用的,例如作为参数。 - Leo
1
дёәд»Җд№Ҳ%20жҜ”+жӣҙеҘҪпјҹд»»дҪ•URLи§ЈжһҗеҷЁйғҪеҸҜд»ҘзҗҶи§ЈдёӨиҖ…гҖӮ - Leopd
1
电子邮件客户端不理解+号。我目前正在为此问题苦苦挣扎,惊讶地发现很难找到一个合适的答案。 - joewoodward
3
这是具有误导性的,URI转义是一种不同的方法。这不会将特殊字符转换为URL编码字符串,例如"/"转换为"%2F"。 - olleh
URI::escape已经过时,不应再使用。相反,请根据您的具体用例使用CGI.escape、URI.encode_www_form或URI.encode_www_form_component。 - Claudio Floreani

11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接