6

Rubyでは、私は持っています:

require 'uri'
foo = "et tu, brutus?"
bar = URI.encode(foo)      # => "et%20tu,%20brutus?"

バーを "et%20tu,%20brutus%3f" ("?" を "%3F" に置き換え) に等しくしようとしています。これを追加しようとすると:

bar["?"] = "%3f"

「?」すべてに一致し、取得します

=> "%3f"

私はもう試した

bar["\?"]
bar['?']
bar["/[?]"]
bar["/[\?]"]

他にもいくつかありますが、どれも機能しません。

4

5 に答える 5

12

require 'cgi'そして電話するCGI.escape

于 2009-02-13T18:37:22.997 に答える
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")
于 2009-02-13T18:33:00.853 に答える
4

現在、Ruby でこれを行う良い方法は 1 つだけです。

require "addressable/uri"
Addressable::URI.encode_component(
  "et tu, brutus?",
  Addressable::URI::CharacterClasses::PATH
)
# => "et%20tu,%20brutus%3F"

しかし、URI を扱う場合は、とにかくAddressableを使用する必要があります。

sudo gem install addressable
于 2009-05-23T20:42:09.587 に答える
0

URI.escapeオプションのパラメーターを受け入れて、エスケープする文字を指定します。デフォルトをオーバーライドするため、2 回呼び出す必要があります。

> URI.escape URI.escape("et tu, brutus?"), "?"
=> "et%20tu,%20brutus%3F"
于 2021-06-23T00:04:21.697 に答える