Как в Ruby заменить символ вопросительного знака в строке?
-
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}]/, '')