Programing

URI 매개 변수 값을 어떻게 인코딩합니까?

crosscheck 2020. 12. 31. 22:50
반응형

URI 매개 변수 값을 어떻게 인코딩합니까?


쿼리 / 매트릭스 매개 변수의 값으로 URI를 보내고 싶습니다. 기존 URI에 추가하려면 먼저 RFC 2396에 따라 인코딩해야합니다. 예를 들어 다음과 같이 입력합니다.

http://google.com/resource?key=value1 & value2

출력을 기대합니다.

http%3a%2f%2fgoogle.com%2fresource%3fkey%3dvalue1%2520%26%2520value2

어느 쪽 java.net.URLEncoderjava.net.URI올바른 출력을 생성 하지 않습니다 . URLEncoderRFC 2396과 동일하지 않은 HTML 형식 인코딩을 URI위한 것입니다. 한 번에 단일 값을 인코딩하는 메커니즘이 없으므로 value1과 value2가 동일한 키의 일부라는 것을 알 수 없습니다.


Jersey의 UriBuilder 는 필요에 따라 application / x-www-form-urlencoded 및 RFC 3986을 사용하여 URI 구성 요소를 인코딩합니다. Javadoc에 따르면

빌더 메서드는 쿼리 매개 변수에 대한 application / x-www-form-urlencoded 미디어 유형 규칙에 따라 해당 URI 구성 요소에서 허용되지 않는 문자의 컨텍스트 인코딩을 수행하고 다른 모든 구성 요소에 대해서는 RFC 3986을 수행합니다. 특정 구성 요소에서 허용되지 않는 문자 만 인코딩되므로 예를 들어 경로 메서드 중 하나에 제공된 경로에는 구분 기호가 합법적 인 문자이고 인코딩되지 않으므로 행렬 매개 변수 또는 다중 경로 세그먼트가 포함될 수 있습니다. 허용되는 경우 백분율 인코딩 값도 인식되며 이중 인코딩되지 않습니다.


Spring의 UriUtils를 사용할 수도 있습니다.


답변에 대해 언급 할만한 평판이 충분하지 않지만 JSR-311 API를 다운로드하는 것만으로는 작동하지 않는다는 점에 유의하고 싶었습니다. 참조 구현 ( jersey ) 을 다운로드해야합니다 .

JSR 페이지에서 API를 다운로드하는 경우에만 API가 런타임에 구현을 찾으려고 할 때 ClassNotFoundException이 발생합니다.


내가 직접 작성했는데 짧고 매우 간단하며 원하는 경우 복사 할 수 있습니다. http://www.dmurph.com/2011/01/java-uri-encoder/


Google GData-java-client의 CharEscapers 가 원하는 것을 가지고있는 것 같습니다 . uriPathEscaper 메소드, uriQueryStringEscaper 및 일반 uriEscaper가 있습니다. (모두 실제 이스케이프를 수행하는 Escaper 객체를 반환합니다.) Apache 라이선스.


나는 당신이 찾고 있는 URI 클래스 라고 생각합니다 .


Mmhh 나는 당신이 이미 URLEncoder를 버렸다는 것을 알고 있지만, 문서가 말하는 것에도 불구하고 나는 그것을 시도하기로 결정했습니다.

당신은 말했다 :

예를 들어 다음과 같은 입력이 주어집니다.

http://google.com/resource?key=value

출력을 기대합니다.

http % 3a % 2f % 2fgoogle.com % 2fresource % 3fkey % 3dvalue

그래서:

C:\oreyes\samples\java\URL>type URLEncodeSample.java
import java.net.*;

public class URLEncodeSample {
    public static void main( String [] args ) throws Throwable {
        System.out.println( URLEncoder.encode( args[0], "UTF-8" ));
    }
}

C:\oreyes\samples\java\URL>javac URLEncodeSample.java

C:\oreyes\samples\java\URL>java URLEncodeSample "http://google.com/resource?key=value"
http%3A%2F%2Fgoogle.com%2Fresource%3Fkey%3Dvalue

예상대로.

이것의 문제는 무엇입니까?

참조 URL : https://stackoverflow.com/questions/444112/how-do-i-encode-uri-parameter-values

반응형