JAVA

URL Encodeing / Decoding 정리

헤니s 2023. 7. 27. 23:10

 

 

URL = Uniform Resource Locater

: 브라우저에서 리소스를 식별하고 요청하기 위해 사용되는 주소를 나타내는 문자열

 

 

URL Encodeing 이 필요한 이유?

: 주소를 나타내는 문자열에 특수문자나 공백이 포함될 경우 URL의 유효성을 해치거나

서버에서 잘못된 로직처리를 유발 할 수 있기 때문에 이를 방지하기 위해  '%' 를 붙인  Percent-encodeing 방식을 사용한다.

 

 

▶URLEncoding(Percent-encodeing)

: URL에 포함될 수 없는 안전하지 않은 문자를 % 기호와 뒤에 두자리의 16진수 숫자로 표현한다. ASCII 문자셋으로 변환하는 과정을 수행

 

 

 

 

URL Encodeing규칙 : RFC3986에서 URL에 포함할 수 있는 문자들을 정의함

  ▷ 예약어(Reserved characters)

: URL에서 특정한 기능을 갖고있는 문자들로, URL의 구조를 정의하거나 특정한 의미를 가지며 URL에 그대로 사용할 수 없고 인코딩을 통해 안전한 형태로 변환해야 한다.

  -인코딩 대상 특수 문자 = !, #, $, &, ', (, ), *, +, ,, /, :, ;, =, ?, @, [, ]

 

  ▷ 비예약어(Unreserved characters)

: URL에서 특정한 의미를 갖고있지 않고, 일반적인 데이터로 사용되는 문자들이며 URL에 인코딩이 필요하지 않는다.

  - 인코딩이 필요 없는 문자

    문자 및 숫자 : 알파벳 대문자(A-Z), 알파벳 소문자(a-z), 숫자(0-9)

    일부 특수문자 : - (하이픈), _ (언더스코어), . (마침표), ~ (물결 기호)

 

 ▷ 공백의 경우 '%20' 또는 '+'  으로 대체된다.

공식 문서 참조 : https://perishablepress.com/stop-using-unsafe-characters-in-urls/

 

(Please) Stop Using Unsafe Characters in URLs | Perishable Press

Just as there are specifications for designing with CSS, HTML, and JavaScript, there are specifications for working with URIs/URLs. The Internet Engineering Task Force (IETF) clearly defines these specifications in RFC 3986: Uniform Resource Identifier (UR

perishablepress.com

 

 

URL Encodeing 변환 표

문자 인코딩
':' %3A
'/' %2F
'?' %3F
'#' %23
'[' %5B
']' %5D
'@' %40
'!' %21
'$' %24
'&' %26
"'" %27
'(' %28
')' %29
'*' %2A
'+' %2B
',' %2C
';' %3B
'=' %3D
'%' %25
' ' %20 or +

 

 

URL 인코딩 변환사이트

https://www.convertstring.com/ko/EncodeDecode/UrlEncode

 

URL 인코딩 - 온라인 URL 인코더

 

www.convertstring.com

 

 

▶JAVA - URLEncoder/Decoder 클래스 예시

	String str = "Hello World 123 www.naver.com/한글입력";
	String encoded = URLEncoder.encode(str, "utf-8");
	System.out.println("encoded= " + encoded);
	// encoded= Hello+World+123+www.naver.com%2F%ED%95%9C%EA%B8%80%EC%9E%85%EB%A0%A5
	
	
	String str2 = "Hello%2c+Word!+%ec%95%88%eb%85%95%ed%95%98%ec%84%b8%ec%9a%94";
	String decoded = URLDecoder.decode(str2, "utf-8");
	System.out.println("decoded= " + decoded);
	// decoded= Hello, Word! 안녕하세요