Em Ruby, como faço para substituir o caractere ponto de interrogação em uma string?
-
23-08-2019 - |
Pergunta
Em Ruby, eu tenho:
require 'uri'
foo = "et tu, brutus?"
bar = URI.encode(foo) # => "et%20tu,%20brutus?"
Eu estou tentando obter bar para igualar "et% 20tu,% 20brutus% 3F" (substituído por "% 3F" "?") Quando tento acrescentar o seguinte:
bar["?"] = "%3f"
o "?" combina com tudo, e eu recebo
=> "%3f"
Eu tentei
bar["\?"]
bar['?']
bar["/[?]"]
bar["/[\?]"]
E algumas outras coisas, nenhuma das quais trabalho.
Sugestões?
Obrigado!
Solução
require 'cgi'
e chamada CGI.escape
Outras dicas
Aqui está uma sessão irb amostra:
irb(main):001:0> x = "geo?"
=> "geo?"
irb(main):002:0> x.sub!("?","a")
=> "geoa"
irb(main):003:0>
No entanto, sub só irá substituir o primeiro caractere. Se você deseja substituir todos os pontos de interrogação em uma string, utilize o gsub método como este:
str.gsub!("?","replacement")
Há apenas uma boa maneira de fazer isso agora em Ruby:
require "addressable/uri"
Addressable::URI.encode_component(
"et tu, brutus?",
Addressable::URI::CharacterClasses::PATH
)
# => "et%20tu,%20brutus%3F"
Mas se você está fazendo coisas com URIs você realmente deve estar usando endereçável de qualquer maneira.
sudo gem install addressable
Se você sabe quais personagens você aceita, você pode remover aqueles que não coincidem.
accepted_chars = 'A-z0-9\s,'
foo = "et tu, brutus?"
bar = foo.gsub(/[^#{accepted_chars}]/, '')