유틸리티

URL 인코딩이란? 한글 주소가 깨지는 이유와 해결법

카카오톡으로 한글이 포함된 링크를 보냈는데, 상대방한테는 %EA%B0%80%EB%82%98... 같은 긴 문자열이 보인다. 링크 자체는 정상 작동하지만 보기에 좋지 않고, 복사해서 다른 곳에 붙여넣으면 제대로 연결되지 않을 때도 있다.

URL 인코딩이 뭔가

URL(웹 주소)에는 영문, 숫자, 일부 특수문자(-_.~)만 그대로 쓸 수 있다. 한글, 공백, 특수문자는 웹 표준에서 허용되지 않기 때문에 퍼센트(%) 뒤에 바이트 값을 붙이는 방식으로 변환된다. 이걸 퍼센트 인코딩, 또는 URL 인코딩이라고 한다.

예시 "서울"을 UTF-8 기준으로 인코딩하면 → %EC%84%9C%EC%9A%B8

인코딩이 문제가 되는 상황

  • 메신저 공유 — 한글 URL을 복사하면 인코딩된 긴 문자열로 바뀌어서 가독성이 떨어진다
  • API 호출 — 쿼리 파라미터에 한글이나 특수문자가 들어가면 인코딩 없이 보내면 오류가 발생한다
  • 로그 분석 — 서버 로그에 찍힌 URL이 인코딩 상태라 어떤 페이지인지 확인하려면 디코딩해야 한다
  • 리다이렉트 URL — 여러 번 인코딩이 중첩되어 이중, 삼중 인코딩 문제가 생기기도 한다

encodeURI와 encodeURIComponent의 차이

함수인코딩 대상보존하는 문자
encodeURI전체 URL: / ? # @ & = + 등 보존
encodeURIComponent파라미터 값거의 모든 특수문자를 인코딩

전체 URL을 인코딩할 때는 encodeURI를, 쿼리 파라미터 값만 인코딩할 때는 encodeURIComponent를 써야 한다. 잘못 쓰면 URL 구조가 깨진다.

브라우저에서 바로 변환하기

개발자 콘솔에서 encodeURIComponent("한글")을 치면 되지만, 비개발자에게는 부담스럽다. URL 인코딩 변환 도구에 텍스트를 붙여넣으면 인코딩/디코딩 결과가 실시간으로 나온다. 입출력 크기 비교도 표시되고, 교환 버튼으로 인코딩과 디코딩 모드를 바로 전환할 수 있다.

URL에 한글이 들어간다면 인코딩 처리는 선택이 아니라 필수다. 한 번 변환해두면 어디에 붙여넣어도 깨지지 않는다.