Dans Ruby, comment puis-je remplacer le caractère de point d'interrogation dans une chaîne?
-
23-08-2019 - |
Question
Dans Ruby, je:
require 'uri'
foo = "et tu, brutus?"
bar = URI.encode(foo) # => "et%20tu,%20brutus?"
Je suis en train d'obtenir barre égale "et% 20tu,% 20brutus% 3F" (remplacé par "% 3F" "?") Lorsque je tente d'ajouter ceci:
bar["?"] = "%3f"
le "?" correspond à tout, et je reçois
=> "%3f"
J'ai essayé
bar["\?"]
bar['?']
bar["/[?]"]
bar["/[\?]"]
Et quelques autres, dont aucun travail.
Conseils?
Merci!
La solution
require 'cgi'
et appel CGI.escape
Autres conseils
Voici un exemple de session irb:
irb(main):001:0> x = "geo?"
=> "geo?"
irb(main):002:0> x.sub!("?","a")
=> "geoa"
irb(main):003:0>
Cependant, sous ne remplacera le premier caractère. Si vous voulez remplacer tous les points d'interrogation dans une chaîne, utilisez le gsub méthode comme ceci:
str.gsub!("?","replacement")
Il n'y a qu'une seule bonne façon de le faire en ce moment à Ruby:
require "addressable/uri"
Addressable::URI.encode_component(
"et tu, brutus?",
Addressable::URI::CharacterClasses::PATH
)
# => "et%20tu,%20brutus%3F"
Mais si vous faites des trucs avec URIs vous devriez vraiment être en utilisant adressable de toute façon.
sudo gem install addressable
Si vous savez quels personnages vous acceptez, vous pouvez supprimer ceux qui ne correspondent pas.
accepted_chars = 'A-z0-9\s,'
foo = "et tu, brutus?"
bar = foo.gsub(/[^#{accepted_chars}]/, '')