URL 인코딩은 어떻게 작동하나요
웹 주소에는 악센트 없는 영문자, 숫자, 일부 기호만 쓸 수 있습니다. 나머지는 모두 코드로 바뀝니다. UTF-8에서 한은 ED, 95, 9C 세 바이트라서 %ED%95%9C가 됩니다. 띄어쓰기는 %20, 폼에서는 +입니다.
인코딩된 글
%EC%84%9C%EC%9A%B8%EC%9D%98 %EA%B9%80%EC%B9%98%EC%B0%8C%EA%B0%9C
되돌린 글
서울의 김치찌개
자주 보이는 URL 코드
%ED%95%9C= 한,%EA%B8%80= 글,%EA%B0%80= 가,%EB%82%98= 나%ED%95%9C%EA%B5%AD%EC%96%B4= 한국어,%EC%84%9C%EC%9A%B8= 서울%E2%82%AC= €,%E2%80%99= ’,%E2%80%93= –%20= 띄어쓰기,%2F= /,%3F= ?,%26= &,%25= %
한글 한 글자는 3바이트라서 코드로는 9글자가 됩니다. 한글 코드는 %EA, %EB, %EC, %ED로 시작하니, 이런 코드가 길게 이어지면 한글이 인코딩된 것으로 보면 됩니다. 오래된 사이트에서는 EUC-KR 코드도 보입니다. %C7%D1%B1%B9%BE%EE는 한국어이며, Mojibuster가 이것도 알아보고 되돌립니다.
URL 코드는 어디서 생기나요
- 복사한 링크: 브라우저는 한글 주소를 읽기 쉽게 보여 주지만, 복사하면
%EC%84%9C%EC%9A%B8처럼 붙여 넣어질 때가 많습니다. - 폼과 방문 분석: 검색어와 UTM 값은 서버 로그와 분석 내보내기 파일에 인코딩된 채 남습니다. 예:
?q=%EA%B9%80%EC%B9%98. - 내보내기와 API: 일부 뉴스레터 도구, 웹훅, API는 값을 인코딩해 저장합니다. 그러면 엑셀과 CSV에 이름 대신 코드가 나옵니다.
- 파일 이름: 서버가 이름을 풀지 않으면 내려받은 파일이
%EA%B3%84%EC%95%BD%EC%84%9C.pdf처럼 저장됩니다.
코드와 깨진 글자가 함께 있을 때
두 번 깨진 글도 있습니다. %C3%87%C3%91%C2%B1%C3%9B는 한글을 잘못 읽어 깨진 글자를 다시 인코딩한 것입니다. Mojibuster는 먼저 코드를 풀고, 이어서 EUC-KR 한글 깨짐을 고칩니다. 결과는 다시 한글입니다.
이 페이지에서는 코드도 변환이 이미 켜져 있습니다. HTML 코드(한), 메일 코드(=ED=95=9C), 프로그램의 이스케이프(\uD55C)도 함께 바꿉니다. 다른 깨짐은 글자 깨짐이란을 보세요.
엑셀, JavaScript, Python, PHP에서 직접 풀기
- 엑셀: 인코딩 함수(영문판
ENCODEURL)는 있지만 디코딩 함수는 없습니다. 열을 복사해 여기에 붙여 넣고 결과를 다시 가져오는 것이 가장 쉽습니다. 엑셀 한글 깨짐도 참고하세요. - JavaScript:
decodeURIComponent("%ED%95%9C")은한을 돌려줍니다. - Python:
urllib.parse.unquote("%ED%95%9C"). 폼의+를 띄어쓰기로 바꾸려면unquote_plus를 쓰세요. - PHP:
rawurldecode(), 폼 데이터에는urldecode().
자주 묻는 질문
%ED%95%9C은 무슨 뜻인가요?
한을 URL 인코딩한 것입니다. UTF-8 세 바이트 ED, 95, 9C에 각각 %가 붙었습니다. %EA%B8%80은 글입니다.
%20은 무슨 뜻인가요?
띄어쓰기입니다. 폼 데이터에서는 +를 쓰기도 합니다. 일반 글의 +는 진짜 더하기 기호일 수 있어서 Mojibuster는 그대로 둡니다.
링크가 업로드되나요?
아니요. 변환은 모두 브라우저 안에서 이루어집니다. 토큰이나 이메일 주소가 든 링크도 기기 밖으로 나가지 않습니다.
왜 100%는 바뀌지 않나요?
실제 특수 문자가 되는 코드만 바꾸기 때문입니다. 100%, 50 %, 일반 글 속의 %20 하나는 그대로 둡니다.