루비에서는 문자열의 물음표 문자를 어떻게 교체합니까?
-
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?"
=> "Geo?"
irb (main) : 002 : 0> x.sub! ( "?", "a")
=> "geoa"
IRB (메인) : 003 : 0>
그러나 Sub는 첫 번째 문자 만 대체합니다. 문자열로 모든 물음표를 교체하려면 GSUB 다음과 같은 방법 :
str.gsub!("?","replacement")
루비에는 지금이 작업을 수행하는 좋은 방법이 하나뿐입니다.
require "addressable/uri"
Addressable::URI.encode_component(
"et tu, brutus?",
Addressable::URI::CharacterClasses::PATH
)
# => "et%20tu,%20brutus%3F"
그러나 Uris로 물건을하고 있다면 정말로 사용해야합니다. 주소 어쨌든.
sudo gem install addressable
어떤 문자를 받아들이는지 알고 있으면 일치하지 않는 문자를 제거 할 수 있습니다.
accepted_chars = 'A-z0-9\s,'
foo = "et tu, brutus?"
bar = foo.gsub(/[^#{accepted_chars}]/, '')
제휴하지 않습니다 StackOverflow