Как в Ruby заменить символ вопросительного знака в строке?

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

  •  23-08-2019
  •  | 
  •  

Вопрос

В Руби у меня есть:

require 'uri'
foo = "et tu, brutus?"
bar = URI.encode(foo)      # => "et%20tu,%20brutus?"

Я пытаюсь получить значение "et%20tu,%20brutus%3f" ("?" заменено на "%3F"). Когда я пытаюсь добавить это:

bar["?"] = "%3f"

"?" соответствует всем, и я получаю

=> "%3f"

я пробовал

bar["\?"]
bar['?']
bar["/[?]"]
bar["/[\?]"]

И еще несколько вещей, ни одна из которых не работает.

Подсказки?

Спасибо!

Это было полезно?

Решение

require 'cgi' и позвони CGI.escape

Другие советы

Вот пример сеанса irb:

irb(main):001:0> x = "geo?"

=> "гео?"

irb(main):002:0> x.sub!("?","a")

=> "геоа"

irb(основной):003:0>

Однако sub заменит только первый символ.Если вы хотите заменить все знаки вопроса в строке, используйте команду gsub такой метод:

str.gsub!("?","replacement")

Прямо сейчас в Ruby есть только один хороший способ сделать это:

require "addressable/uri"
Addressable::URI.encode_component(
  "et tu, brutus?",
  Addressable::URI::CharacterClasses::PATH
)
# => "et%20tu,%20brutus%3F"

Но если вы работаете с URI, вам действительно следует использовать Адресный в любом случае.

sudo gem install addressable

Если вы знаете, какие символы вы принимаете, вы можете удалить те, которые не совпадают.

accepted_chars = 'A-z0-9\s,'
foo = "et tu, brutus?"
bar = foo.gsub(/[^#{accepted_chars}]/, '')
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top