In Ruby Wie ersetze ich das Fragezeichen in einem String?
-
23-08-2019 - |
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!
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}]/, '')