Em Ruby, como faço para substituir o caractere ponto de interrogação em uma string?

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

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

Foi útil?

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}]/, '')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top