Dans Ruby, comment puis-je remplacer le caractère de point d'interrogation dans une chaîne?

StackOverflow https://stackoverflow.com/questions/547127

  •  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!

Était-ce utile?

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}]/, '')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top