🔗 URL Encoder/Decoder
URL 특수문자를 안전하게 인코딩 및 디코딩
Text Input
ℹ️ About URL Encoding
URL encoding (also known as percent-encoding) converts characters into a format that can be transmitted over the Internet. Special characters are replaced with a "%" followed by two hexadecimal digits.
" " → %20 or +! # $ & ' ( ) * + , / : ; = ? @ [ ]"Hello World!" → Hello+World%21📖 URL 인코딩이란?
🔤 URL 인코딩 (Percent Encoding)
URL 인코딩은 URL에서 특수문자나 ASCII 범위 외의 문자를 안전하게 전송하기 위해 변환하는 과정입니다. 인터넷 표준인 RFC 3986에 정의되어 있으며, 특수문자를 % 기호와 16진수 코드로 변환합니다. 이를 통해 URL에서 공백, 한글, 특수문자 등을 문제없이 사용할 수 있습니다.
원본: Hello World! 안녕하세요 URL: Hello%20World%21%20%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94
💡 URL 인코딩 사용 사례
- 쿼리 파라미터: URL에 검색어나 사용자 입력값 포함 (예: ?q=검색어)
- 한글 URL: 한글이 포함된 페이지 주소를 브라우저에서 안전하게 전송
- API 요청: REST API에서 특수문자가 포함된 데이터 전송
- 폼 데이터: HTML 폼 제출 시 application/x-www-form-urlencoded 형식
- OAuth/인증: 리디렉션 URL이나 state 파라미터 인코딩
- 링크 공유: SNS나 메신저에서 한글/특수문자 포함 링크 공유
🔧 사용 방법
- 인코딩 (Encode): 일반 텍스트를 입력하면 URL 안전 형식으로 자동 변환
- 디코딩 (Decode): %XX 형식의 URL 인코딩된 텍스트를 원본으로 복원
- 양방향 변환: 실시간으로 입력 즉시 변환 결과 표시
- 복사: 변환된 결과를 클릭하여 클립보드에 복사
- URL 전체 인코딩: 쿼리스트링이나 URL 일부만 인코딩 가능
🔡 인코딩이 필요한 문자
예약된 문자 (Reserved Characters)
URL에서 특별한 의미를 가진 문자들로, 데이터로 사용하려면 반드시 인코딩해야 합니다.
| 문자 | 인코딩 | 설명 |
|---|---|---|
: | %3A | 프로토콜과 호스트 구분 |
/ | %2F | 경로 구분자 |
? | %3F | 쿼리 시작 |
# | %23 | 프래그먼트 식별자 |
& | %26 | 파라미터 구분 |
= | %3D | 키-값 구분 |
@ | %40 | 사용자 정보 |
% | %25 | 인코딩 접두사 |
안전하지 않은 문자 (Unsafe Characters)
URL에서 문제를 일으킬 수 있는 문자들입니다.
공백 (Space)→%20또는+< >→%3C %3E{ }→%7B %7D" (따옴표)→%22\ (백슬래시)→%5C^ (캐럿)→%5E` (백틱)→%60| (파이프)→%7C
유니코드 문자 (한글, 중국어, 이모지 등)
ASCII 범위를 벗어나는 모든 문자는 UTF-8 인코딩 후 %XX 형식으로 변환됩니다.
한글→%ED%95%9C%EA%B8%80こんにちは→%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF你好→%E4%BD%A0%E5%A5%BD😀→%F0%9F%98%80
🔄 URL 구조와 인코딩 규칙
https://example.com:8080/path/to/page?query=value&lang=ko#section각 부분별로 인코딩 규칙이 다릅니다:
- 프로토콜 (https://): 인코딩 불필요
- 호스트 (example.com): Punycode 사용 (한글 도메인)
- 포트 (:8080): 인코딩 불필요
- 경로 (/path/to/page): / 제외하고 인코딩
- 쿼리 파라미터 (?query=value): = & ? 제외하고 인코딩
- 프래그먼트 (#section): # 제외하고 인코딩
💻 프로그래밍 언어별 사용 예시
JavaScript:
// URL 인코딩
const encoded = encodeURIComponent("검색어 & 특수문자");
// "%EA%B2%80%EC%83%89%EC%96%B4%20%26%20%ED%8A%B9%EC%88%98%EB%AC%B8%EC%9E%90"
// URL 디코딩
const decoded = decodeURIComponent(encoded);
// "검색어 & 특수문자"
// 전체 URL 인코딩 (프로토콜, 호스트 제외)
const url = encodeURI("https://example.com/검색");
// "https://example.com/%EA%B2%80%EC%83%89"Python:
from urllib.parse import quote, unquote
# URL 인코딩
encoded = quote("검색어 & 특수문자")
# '%EA%B2%80%EC%83%89%EC%96%B4%20%26%20%ED%8A%B9%EC%88%98%EB%AC%B8%EC%9E%90'
# URL 디코딩
decoded = unquote(encoded)
# '검색어 & 특수문자'
# 특정 문자는 인코딩하지 않음
safe_encoded = quote("path/to/file", safe="/")
# 'path/to/file' (/ 는 인코딩되지 않음)Java:
import java.net.URLEncoder;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
// URL 인코딩
String encoded = URLEncoder.encode("검색어 & 특수문자", StandardCharsets.UTF_8);
// "%EA%B2%80%EC%83%89%EC%96%B4+%26+%ED%8A%B9%EC%88%98%EB%AC%B8%EC%9E%90"
// URL 디코딩
String decoded = URLDecoder.decode(encoded, StandardCharsets.UTF_8);
// "검색어 & 특수문자"❓ 자주 묻는 질문 (FAQ)
Q: %20과 +의 차이는 무엇인가요?
A: 둘 다 공백을 나타내지만 사용 위치가 다릅니다. %20은 URL 전체에서 사용 가능하고, +는 쿼리 파라미터(application/x-www-form-urlencoded)에서만 사용됩니다. 일반적으로 %20 사용을 권장합니다.
Q: encodeURI와 encodeURIComponent의 차이는?
A: encodeURI는 전체 URL을 인코딩하며 :, /, ? 등 URL 구조 문자는 유지합니다. encodeURIComponent는 파라미터 값을 인코딩하며 모든 특수문자를 변환합니다. 쿼리 파라미터 값에는 encodeURIComponent를 사용하세요.
Q: 이중 인코딩 문제는 무엇인가요?
A: 이미 인코딩된 문자열을 다시 인코딩하는 것입니다. 예: "검색어"를 인코딩하면 "%EA%B2%80%EC%83%89%EC%96%B4"인데, 이를 다시 인코딩하면 "%25EA%25B2..." 처럼 %가 %25로 변환됩니다. 항상 디코딩 후 필요시 재인코딩하세요.
Q: 한글 도메인은 어떻게 인코딩하나요?
A: 도메인 부분은 URL 인코딩이 아닌 Punycode(퓨니코드)를 사용합니다. 예: "한글.com" → "xn--bj0bj06e.com". 브라우저가 자동으로 변환하므로 직접 변환할 필요는 거의 없습니다.
Q: URL 인코딩은 보안 기능인가요?
A: 아니요. URL 인코딩은 단순히 특수문자를 안전하게 전송하기 위한 것이지 암호화나 보안 기능이 아닙니다. 민감한 정보는 HTTPS를 사용하고 암호화해야 합니다.
💡 URL 인코딩 사용 팁
- 파라미터만 인코딩: URL 전체가 아닌 쿼리 파라미터 값만 인코딩하세요
- UTF-8 사용: 모든 URL 인코딩은 UTF-8 인코딩을 사용하는 것이 표준입니다
- 디버깅: 브라우저 개발자 도구의 Network 탭에서 인코딩된 URL 확인
- API 호출: REST API 호출 시 라이브러리가 자동으로 인코딩하는지 확인
- SEO: URL 경로는 가능하면 영문으로 작성 (한글보다 검색엔진 친화적)
- URL 단축: 긴 인코딩 URL은 Bitly 같은 단축 서비스 활용
- 로그: 서버 로그에는 인코딩된 상태로 저장되므로 디코딩해서 분석
⚠️ 주의사항
- URL 전체를 인코딩하면 프로토콜과 호스트가 깨져서 작동하지 않습니다
- 이미 인코딩된 문자열을 다시 인코딩하지 마세요 (이중 인코딩)
- 서버 측에서 자동 디코딩하는지 확인하세요 (이중 디코딩 방지)
- %XX 형식이 항상 올바른 UTF-8 시퀀스인지 검증하세요
- URL 최대 길이 제한 (브라우저별 2KB~8KB)을 고려하세요
- 민감한 정보를 URL에 포함하지 마세요 (브라우저 히스토리, 서버 로그에 남음)