在Ruby中,我有:
require 'uri'
foo = "et tu, brutus?"
bar = URI.encode(foo) # => "et%20tu,%20brutus?"
我试图让bar等于“et%20tu,%20brutus%3f”(“?”替换为“%3F”)当我尝试添加此内容时:
bar["?"] = "%3f"
“?”匹配一切,我得到
=> "%3f"
我试过
bar["\?"]
bar['?']
bar["/[?]"]
bar["/[\?]"]
还有其他一些事情,其中没有一个可行。
提示?
谢谢!
答案 0 :(得分:12)
require 'cgi'
并致电CGI.escape
答案 1 :(得分:4)
以下是irb会话示例:
irb(main):001:0> x = "geo?"
=> "geo?"
irb(main):002:0> x.sub!("?","a")
=> "geoa"
irb(main):003:0>
但是,sub只会替换第一个字符。如果要替换字符串中的所有问号,请使用 gsub 方法,如下所示:
str.gsub!("?","replacement")
答案 2 :(得分:4)
现在只有一种方法可以在Ruby中执行此操作:
require "addressable/uri"
Addressable::URI.encode_component(
"et tu, brutus?",
Addressable::URI::CharacterClasses::PATH
)
# => "et%20tu,%20brutus%3F"
但是如果你正在使用URI,你应该真的使用Addressable。
sudo gem install addressable
答案 3 :(得分:0)
URI.escape
接受可选参数来告诉您要转义哪些字符。它会覆盖默认值,因此您必须调用它两次。
> URI.escape URI.escape("et tu, brutus?"), "?"
=> "et%20tu,%20brutus%3F"