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.

Space: " "%20 or +
Special chars: ! # $ & ' ( ) * + , / : ; = ? @ [ ]
Example: "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나 메신저에서 한글/특수문자 포함 링크 공유

🔧 사용 방법

  1. 인코딩 (Encode): 일반 텍스트를 입력하면 URL 안전 형식으로 자동 변환
  2. 디코딩 (Decode): %XX 형식의 URL 인코딩된 텍스트를 원본으로 복원
  3. 양방향 변환: 실시간으로 입력 즉시 변환 결과 표시
  4. 복사: 변환된 결과를 클릭하여 클립보드에 복사
  5. 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): # 제외하고 인코딩
⚠️ 주의: URL 전체를 인코딩하면 안 됩니다! 쿼리 파라미터의 값이나 경로의 특정 부분만 인코딩해야 합니다.

💻 프로그래밍 언어별 사용 예시

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에 포함하지 마세요 (브라우저 히스토리, 서버 로그에 남음)