URL Encodeing / Decoding 정리
▶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! 안녕하세요