문제

루비에는 다음과 같습니다.

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}]/, '')
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top