Frage

In Ruby, ich habe:

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

Ich versuche, bar zu erhalten, gleich "et% 20tu,% 20brutus% 3f" (ersetzt durch "% 3F" "?") Wenn ich versuche, diese hinzuzufügen:

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

das "?" alles passt, und ich

=> "%3f"

Ich habe versucht,

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

Und ein paar andere Dinge, von denen keine Arbeit.

Hinweise?

Danke!

War es hilfreich?

Lösung

require 'cgi' und Call CGI.escape

Andere Tipps

Hier ist ein Beispiel irb Sitzung:

irb(main):001:0> x = "geo?"

=> "geo?"

irb(main):002:0> x.sub!("?","a")

=> "geoa"

irb(main):003:0>

Allerdings Unter wird nur das erste Zeichen ersetzen. Wenn Sie alle Fragezeichen in einer Zeichenfolge ersetzen möchten, verwenden Sie die gsub Methode wie folgt:

str.gsub!("?","replacement")

Es gibt nur eine gute Möglichkeit, dieses Recht jetzt in Ruby zu tun:

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

Aber wenn Sie Sachen tun mit URIs sollten Sie wirklich sein mit Adressierbarer sowieso.

sudo gem install addressable

Wenn Sie wissen, welche Zeichen Sie akzeptieren, Sie können diejenigen entfernen, die nicht übereinstimmen.

accepted_chars = 'A-z0-9\s,'
foo = "et tu, brutus?"
bar = foo.gsub(/[^#{accepted_chars}]/, '')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top