首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Ruby中对字符串进行URL编码

如何在Ruby中对字符串进行URL编码
EN

Stack Overflow用户
提问于 2011-07-16 07:30:31
回答 8查看 182.3K关注 0票数 153

如何URI::encode一个字符串,如下所示:

代码语言:javascript
运行
复制
\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a

要以如下格式获取它:

代码语言:javascript
运行
复制
%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF%124Vx%9A

根据RFC 1738?

这是我尝试过的:

代码语言:javascript
运行
复制
irb(main):123:0> URI::encode "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a"
ArgumentError: invalid byte sequence in UTF-8
    from /usr/local/lib/ruby/1.9.1/uri/common.rb:219:in `gsub'
    from /usr/local/lib/ruby/1.9.1/uri/common.rb:219:in `escape'
    from /usr/local/lib/ruby/1.9.1/uri/common.rb:505:in `escape'
    from (irb):123
    from /usr/local/bin/irb:12:in `<main>'

另外:

代码语言:javascript
运行
复制
irb(main):126:0> CGI::escape "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a"
ArgumentError: invalid byte sequence in UTF-8
    from /usr/local/lib/ruby/1.9.1/cgi/util.rb:7:in `gsub'
    from /usr/local/lib/ruby/1.9.1/cgi/util.rb:7:in `escape'
    from (irb):126
    from /usr/local/bin/irb:12:in `<main>'

我在互联网上到处寻找,还没有找到一种方法来做这件事,尽管我几乎可以肯定有一天我做了这件事没有任何麻烦。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-07-16 07:43:20

代码语言:javascript
运行
复制
str = "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a".force_encoding('ASCII-8BIT')
puts CGI.escape str


=> "%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF%124Vx%9A"
票数 191
EN

Stack Overflow用户

发布于 2015-02-18 09:26:41

现在,您应该使用ERB::Util.url_encodeCGI.escape。它们之间的主要区别在于它们对空格的处理:

代码语言:javascript
运行
复制
>> ERB::Util.url_encode("foo/bar? baz&")
=> "foo%2Fbar%3F%20baz%26"

>> CGI.escape("foo/bar? baz&")
=> "foo%2Fbar%3F+baz%26"

CGI.escape遵循CGI/HTML forms spec并给出一个application/x-www-form-urlencoded字符串,它要求将空格转义为+,而ERB::Util.url_encode遵循RFC 3986,这要求将它们编码为%20

有关更多讨论,请参阅"https://stackoverflow.com/questions/2824126/whats-the-difference-between-uri-escape-and-cgi-escape/13059657#13059657“。

票数 99
EN

Stack Overflow用户

发布于 2014-01-31 04:33:30

代码语言:javascript
运行
复制
str = "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a"
require 'cgi'
CGI.escape(str)
# => "%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF%124Vx%9A"

摘自@J-Rou的评论

票数 72
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6714196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档