[RUBY-ON-RAILS] 어떻게 URL에 루비에서 문자열을 인코딩
RUBY-ON-RAILS어떻게 URL에 루비에서 문자열을 인코딩
I URI을 어떻게 :: 인코딩에게 문자열을 같은 :
\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a
같은 형식으로 얻을 수 있습니다 :
%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF%124Vx%9A
1738 RFC에 따라?
여기에 내가 뭘하려입니다 :
irb(main):123:0> URI::encode "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a"
ArgumentError: invalid byte sequence in UTF-8
from /usr/local/lib/ruby/1.9.1/uri/common.rb:219:in `gsub'
from /usr/local/lib/ruby/1.9.1/uri/common.rb:219:in `escape'
from /usr/local/lib/ruby/1.9.1/uri/common.rb:505:in `escape'
from (irb):123
from /usr/local/bin/irb:12:in `<main>'
또한:
irb(main):126:0> CGI::escape "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a"
ArgumentError: invalid byte sequence in UTF-8
from /usr/local/lib/ruby/1.9.1/cgi/util.rb:7:in `gsub'
from /usr/local/lib/ruby/1.9.1/cgi/util.rb:7:in `escape'
from (irb):126
from /usr/local/bin/irb:12:in `<main>'
나는 인터넷에 대한 모든 것을보고 내가 저번에 내가 전혀 아무 문제없이 이런 짓을 거의 긍정적 인 생각하지만,이 작업을 수행 할 수있는 방법을 발견하지 않았습니다.
해결법
-
==============================
1.
require 'uri' str = "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a".force_encoding('ASCII-8BIT') puts URI::encode(str)
"URL에 루비의 문자열을 인코딩하는 방법"의 설명을 참조하십시오.
-
==============================
2.요즘, 당신은 ERB :: Util.url_encode이나 이는 cgi를 사용해야합니다. 그들 사이의 가장 큰 차이점은 공간의 자신의 처리입니다 :
요즘, 당신은 ERB :: Util.url_encode이나 이는 cgi를 사용해야합니다. 그들 사이의 가장 큰 차이점은 공간의 자신의 처리입니다 :
>> ERB::Util.url_encode("foo/bar? baz&") => "foo%2Fbar%3F%20baz%26" >> CGI.escape("foo/bar? baz&") => "foo%2Fbar%3F+baz%26"
이는 cgi는 CGI / HTML 형태의 사양을 다음 당신에게 ERB 반면 :: Util.url_encode 인코딩 할 것을 요구 RFC 3986을, 다음, 공간 +에 이스케이프 필요한 응용 프로그램 / x-www-form-urlencoded를 문자열을 제공합니다 20 %.
"URI.escape하고 이는 cgi의 차이점은 무엇입니까?"를 참조 더 논의.
-
==============================
3.
str = "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a" require 'cgi' CGI.escape(str) # => "%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF%124Vx%9A"
J-ROU의 코멘트 @에서 촬영
-
==============================
4.당신은 그것을 위해 어드레스로 :: URI 보석을 사용할 수 있습니다 :
당신은 그것을 위해 어드레스로 :: URI 보석을 사용할 수 있습니다 :
require 'addressable/uri' string = '\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a' Addressable::URI.encode_component(string, Addressable::URI::CharacterClasses::QUERY) # "%5Cx12%5Cx34%5Cx56%5Cx78%5Cx9a%5Cxbc%5Cxde%5Cxf1%5Cx23%5Cx45%5Cx67%5Cx89%5Cxab%5Cxcd%5Cxef%5Cx12%5Cx34%5Cx56%5Cx78%5Cx9a"
그것은 이는 cgi보다, 예를 들어, 제대로 20 %로 공간을 인코딩하고 + 기호로, 당신은 위키 백과의 "응용 프로그램 /을 x-www-form-urlencoded 형식"에서 더 많은 읽을 수없는, 더 현대적인 형식을 사용합니다.
2.1.2 :008 > CGI.escape('Hello, this is me') => "Hello%2C+this+is+me" 2.1.2 :009 > Addressable::URI.encode_component('Hello, this is me', Addressable::URI::CharacterClasses::QUERY) => "Hello,%20this%20is%20me"
-
==============================
5.난 당신의 코드에서 사용 URI 인코딩 물건 청소기를 만들기 위해 보석을 만들었습니다. 그것은 당신을 위해 바이너리 인코딩을 처리합니다.
난 당신의 코드에서 사용 URI 인코딩 물건 청소기를 만들기 위해 보석을 만들었습니다. 그것은 당신을 위해 바이너리 인코딩을 처리합니다.
실행 보석 URI 핸들러를 설치 한 후 사용
require 'uri-handler' str = "\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef\x12\x34\x56\x78\x9a".to_uri # => "%124Vx%9A%BC%DE%F1%23Eg%89%AB%CD%EF%124Vx%9A"
그것은 String 클래스에 URI 변환 기능을 추가합니다. 당신은 또한 당신이 사용하고자하는 옵션 인코딩 문자열 인수를 전달할 수 있습니다. 기본적으로는 직선 UTF-8 인코딩이 실패 할 경우 인코딩 '진'으로 설정합니다.
-
==============================
6.암호:
암호:
str = "http://localhost/with spaces and spaces" encoded = URI::encode(str) puts encoded
결과:
http://localhost/with%20spaces%20and%20spaces
-
==============================
7.나는 원래 전체 URL 문자열에서 만이 아닌 경로에 파일 이름에 특수 문자를 탈출하려고했다.
나는 원래 전체 URL 문자열에서 만이 아닌 경로에 파일 이름에 특수 문자를 탈출하려고했다.
ERB :: Util.url_encode 내 사용을 위해 작동하지 않았다 :
helper.send(:url_encode, "http://example.com/?a=\11\15") # => "http%3A%2F%2Fexample.com%2F%3Fa%3D%09%0D"
두 답변을 바탕으로 "왜 오래된 어디에로 표시 URI.escape ()입니다 것은이 정규 표현식 :: 안전하지 않은 상수?", 그것은이다 더 나은 URI :: 탈출 # 이스케이프를 사용하는 것보다 URI :: RFC2396_Parser 번호 탈출 것 같습니다. 그러나, 그들은 모두 나에게 같은 행동을하고 있습니다 :
URI.escape("http://example.com/?a=\11\15") # => "http://example.com/?a=%09%0D" URI::Parser.new.escape("http://example.com/?a=\11\15") # => "http://example.com/?a=%09%0D"
-
==============================
8.당신이 다른 부분에 수동으로 분할을 생각하지 않고 전체 URL "인코딩"을 원하는 경우, 나는이 내가 URI.encode을 사용하는 데 사용되는 것과 같은 방식으로 일을 다음과 발견 :
당신이 다른 부분에 수동으로 분할을 생각하지 않고 전체 URL "인코딩"을 원하는 경우, 나는이 내가 URI.encode을 사용하는 데 사용되는 것과 같은 방식으로 일을 다음과 발견 :
URI.parse(my_url).to_s
from https://stackoverflow.com/questions/6714196/how-to-url-encode-a-string-in-ruby by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 데이터베이스 어댑터에 대한 지정된 'mysql2',하지만 보석이로드되지 않습니다 보석 :: LoadError - 4 레일 (0) | 2020.02.28 |
---|---|
[RUBY-ON-RAILS] 루비 : PDF 파일을 읽기 (0) | 2020.02.28 |
[RUBY-ON-RAILS] 레일에 루비 - 두 번 같은 모델을 참조? (0) | 2020.02.27 |
[RUBY-ON-RAILS] 레일 - 데이터 - * 속성을 가진 LINK_TO 도우미 [중복] (0) | 2020.02.27 |
[RUBY-ON-RAILS] 루트 도메인에 Heroku가 SSL (0) | 2020.02.27 |