프로그래밍 언어/JAVA

Java 쿼리 문자열 매개 변수의 URL 인코딩

Rateye 2021. 12. 19. 14:35
728x90
반응형
질문 : 쿼리 문자열 매개 변수의 Java URL 인코딩

URL이 있다고

http://example.com/query?q=

사용자가 입력 한 다음과 같은 쿼리가 있습니다.

임의의 단어 £ 500 bank $

결과가 올바르게 인코딩 된 URL이되기를 원합니다.

http://example.com/query?q=random%20word%20%A3500%20bank%20%24

이를 달성하는 가장 좋은 방법은 무엇입니까? URLEncoder 시도하고 URI / URL 개체를 만들었지 만 어느 것도 제대로 나오지 않았습니다.

답변

URLEncoder 는 갈 길입니다. 당신은 확실하지 쿼리 문자열 매개 변수를 구분 문자, 인코딩에 마음 개별 쿼리 문자열 매개 변수 이름 및 / 또는 값이 아닌 전체 URL을 유지할 필요가 & 나 매개 변수 이름과 값의 분리 문자 = .

String q = "random word £500 bank $";
String url = "https://example.com?q=" + URLEncoder.encode(q, StandardCharsets.UTF_8);

Java 10 이상이 아닌 경우에는 StandardCharsets.UTF_8.toString() 을 charset 인수로 사용하거나 Java 7 이상이 아닌 경우 "UTF-8" .

쿼리 매개 변수의 공백은 합법적으로 유효한 %20 아니라 + %20 ? 뒤의 부분)이 아니라 ? 앞의 부분)에서 공백을 나타내는 데 사용됩니다.

또한 세 가지 encode() 메서드가 있습니다. 하나는 Charset 을 두 번째 인수로 사용 String 을 두 번째 인수로 사용하여 확인 된 예외를 발생시킵니다. Charset 인수가없는 것은 더 이상 사용되지 않습니다. 절대 사용하지 말고 항상 Charset 인수를 지정하십시오. javadoc 은 RFC3986W3C에서 요구하는 UTF-8 인코딩을 사용하도록 명시 적으로 권장합니다.

다른 모든 문자는 안전하지 않으며 먼저 일부 인코딩 체계를 사용하여 하나 이상의 바이트로 변환됩니다. 그런 다음 각 바이트는 3 자 문자열 "% xy"로 표시됩니다. 여기서 xy는 바이트의 두 자리 16 진수 표현입니다. 사용할 권장 인코딩 체계는 UTF-8 입니다. 그러나 호환성을 위해 인코딩이 지정되지 않은 경우 플랫폼의 기본 인코딩이 사용됩니다.

출처 : https://stackoverflow.com/questions/10786042/java-url-encoding-of-query-string-parameters
728x90
반응형