T

Text Machine

강력한 텍스트 도구를 브라우저에서

URL 인코더

특수 문자를 인코딩하여 텍스트를 URL 안전 형식으로 변환합니다.

입력 텍스트

인코딩할 텍스트 입력:

URL Encoder / Decoder 사용 방법

  1. 1

    텍스트 또는 URL 입력

    인코딩하려는 텍스트나, 디코딩하려는 URL 인코딩된 문자열을 입력란에 붙여넣으세요.

  2. 2

    인코딩 또는 디코딩 선택

    텍스트를 URL에 안전한 형식으로 변환하려면 Encode를, 퍼센트 인코딩된 텍스트를 원래대로 되돌리려면 Decode를 선택하세요.

  3. 3

    변환 실행

    입력을 처리해 선택한 방향으로 즉시 변환하세요.

  4. 4

    결과 복사

    인코딩 또는 디코딩된 출력을 복사해 링크, 쿼리 문자열, API 요청에 사용하세요.

URL 인코딩과 퍼센트 인코딩 설명

URL 인코딩이란 무엇인가요

URL 인코딩(더 정확히는 퍼센트 인코딩이라고 합니다)은 URL이 다른 방법으로는 표현할 수 없는 문자를 실어 나르게 해 주는 메커니즘입니다. URL은 작은 ASCII 문자 집합으로 제한되어 있고, 그중 몇몇 문자는 특별한 구조적 의미를 가집니다. 퍼센트 인코딩은 문제가 되는 모든 문자를 퍼센트 기호와 그 바이트 값의 16진수 두 자리로 바꾸므로, 공백은 %20 이 되고 해시는 %23 이 됩니다.

그 규칙은 URI 문법을 규정하는 표준인 RFC 3986에 정의되어 있습니다. 목표는 단순합니다. URL 안에 놓인 값이 끼어든 문자가 구분자로 오인되거나 도중의 소프트웨어에 의해 떨어져 나가는 일 없이, 의도한 그대로 전송되고 파싱되도록 보장하는 것입니다.

예약 문자 대 비예약 문자

RFC 3986은 문자를 여러 무리로 나눕니다. 비예약 집합은 언제나 안전하며 결코 인코딩되지 않습니다. 글자 A-Z 와 a-z, 숫자 0-9, 그리고 네 개의 표시인 하이픈(-), 마침표(.), 밑줄(_), 물결표(~)입니다. 이들은 구조적 의미를 지니지 않고 URL 어디에서나 유효하므로 손대지 않고 그대로 통과합니다.

예약 집합은 URL의 부분들을 구분하는 문장 부호입니다. 일반 구분자 : / ? # [ ] @ 와 하위 구분자 ! $ & ' ( ) * + , ; = 입니다. 이 문자들은 구분자로서는 유효하지만, 구분자가 아니라 값 안에 나타날 때는 파서가 오독하지 않도록 퍼센트 인코딩되어야 합니다. 예를 들어 쿼리 값 안의 앰퍼샌드는 %26 이 되어야 하며, 그러지 않으면 새 매개변수의 시작으로 읽힙니다.

UTF-8 바이트 기반

퍼센트 인코딩은 문자에 직접 작용하는 것이 아니라 바이트에 작용하며, 현대의 URL은 UTF-8을 바이트 출처로 씁니다. ASCII 문자는 단일 바이트이므로 인코딩된 ASCII 문자는 하나의 퍼센트 이스케이프입니다. ASCII를 벗어난 문자는 먼저 그 UTF-8 바이트 시퀀스로 표현된 뒤, 각 바이트가 따로따로 퍼센트 인코딩되어 바이트당 하나의 이스케이프를 만들어 냅니다.

악센트가 붙은 글자 é 가 표준적인 예입니다. UTF-8에서 이는 두 바이트 0xC3 와 0xA9 이므로 %C3%A9 로 퍼센트 인코딩됩니다. 눈에 보이는 한 문자에 대해 두 개의 이스케이프인 것이죠. 유로 기호는 UTF-8에서 세 바이트라 %E2%82%AC 가 됩니다. 비라틴 텍스트가 인코딩될 때 이토록 많이 늘어나는 이유가 바로 이것입니다. 각 문자가 그 UTF-8 길이에 따라 두 개, 세 개, 혹은 네 개의 퍼센트 이스케이프로 바뀔 수 있기 때문입니다.

직접 해 보는 예시: 검색 값 인코딩하기

"Q&A: cats + dogs"라는 구절을 쿼리 문자열에 넣고 싶다고 합시다. 글자, 숫자, 그리고 콜론을 둘러싼 텍스트는 단어로 남지만, 안전하지 않은 문자와 예약 문자는 이스케이프됩니다. 공백은 %20 이 되고, 앰퍼샌드는 %26 이 되며, 콜론은 %3A 가 되고, 더하기 기호는 %2B 가 됩니다. 리터럴 더하기는 그러지 않으면 폼 데이터에서 공백으로 읽히기 때문입니다.

결과는 Q%26A%3A%20cats%20%2B%20dogs 입니다. ?q=Q%26A%3A%20cats%20%2B%20dogs 처럼 링크에 넣으면, 서버는 이를 정확한 원래 구절로 다시 디코딩합니다. 구분자가 아니라 데이터로 의도된 모든 예약 문자가 그 여정을 견디기 위해 인코딩되어야 했다는 점을 눈여겨보세요.

공백: %20 대 더하기 기호

공백에는 유명한 특이점이 있습니다. 경로와 URL 대부분에서 공백은 %20 으로 인코딩됩니다. 그러나 HTML 폼 제출과 많은 쿼리 문자열에 쓰이는 application/x-www-form-urlencoded 형식에서는 공백이 전통적으로 더하기 기호(+)로 인코딩됩니다. 두 관례 모두 활발히 쓰이고 있으며, 이것이 잦은 혼란의 원천입니다.

그 실질적인 결과는, 폼 형식 데이터 안의 리터럴 더하기 기호는 공백으로 오인되지 않도록 그 자체가 %2B 로 인코딩되어야 한다는 것입니다. 디코딩할 때는 그 문자열을 어느 관례가 만들어 냈는지 알아야 합니다. 폼 값 안의 더하기는 공백을 뜻하지만, 다른 곳의 더하기는 보통 리터럴 더하기를 뜻합니다. 이 도구는 표준 퍼센트 인코딩을 처리하므로 여러분의 값이 깔끔하게 왕복합니다.

URL 전체 인코딩 대 단일 값 인코딩

JavaScript는 두 가지 서로 다른 일에 대응되는 두 함수를 제공하며, 잘못된 것을 고르는 것은 고전적인 버그입니다. encodeURI 는 URL 전체를 위한 것입니다. 구조적 문자 : / ? # & = 를 손대지 않고 그대로 두어 URL이 계속 작동하게 하고, 공백처럼 명백히 불법인 문자만 인코딩합니다. encodeURIComponent 는 하나의 쿼리 값이나 경로 구획 같은 단일 데이터 조각을 위한 것입니다. 예약 구분자도 이스케이프하므로, 안에 박힌 슬래시나 앰퍼샌드가 주변 URL을 깨뜨릴 수 없습니다.

이 도구는 구획 형식 인코딩, 즉 encodeURIComponent 동작을 수행합니다. 여러분이 통제하는 구분자 사이에 신뢰할 수 없는 값을 넣을 때의 안전한 기본값이죠. 예약 구분자도 이스케이프하므로, 안에 박힌 슬래시나 앰퍼샌드가 주변 URL을 깨뜨릴 수 없습니다. 그 대가로, 여기에 완전한 주소를 붙여넣어서는 안 됩니다. 구조적 문자 : / ? # & = 까지 이스케이프해 링크를 망가뜨리기 때문입니다. URL 전체를 인코딩하려면, 개별 값이나 경로 구획을 각각 인코딩한 뒤 완성된 주소를 직접 조립하세요.

이중 인코딩이라는 실수

이중 인코딩은 가장 흔한 퍼센트 인코딩 버그입니다. 이미 인코딩된 텍스트가 두 번째로 인코딩될 때 일어납니다. 방아쇠는 퍼센트 기호 자체입니다. 퍼센트는 예약 문자이므로 이를 인코딩하면 %20 이 %2520 으로 바뀝니다. 앞의 % 가 %25 가 되고 20 은 그대로 남기 때문입니다. 두 번 인코딩된 값은 의도한 공백 대신 %2520 같은 리터럴 이스케이프 시퀀스를 최종 사용자에게 보여 줍니다.

정확히 한 번만, URL을 만드는 순간에 인코딩하고, 이미 퍼센트 이스케이프를 담고 있는 문자열을 인코더에 다시 통과시키지 않음으로써 이를 피하세요. %25 뒤에 또 다른 이스케이프처럼 보이는 것이 따라온다면, 거의 틀림없이 이중 인코딩된 데이터를 보고 있는 것이며, 해결책은 그것을 한 번 더 디코딩하거나 코드에서 중복된 인코딩 단계를 없애는 것입니다.

어디에 쓰게 될까요

퍼센트 인코딩은 값이 URL 안을 이동하는 곳이라면 어디에나 있습니다. 검색과 필터를 위한 쿼리 문자열을 만들고, 사용자가 입력한 텍스트를 담은 링크를 구성하고, REST API에 매개변수를 넘기고, return_url 매개변수 안에 리다이렉트 대상을 끼워 넣고, 바이트 단위로 일치해야 하는 요청에 서명하는 일이 모두 올바른 인코딩에 달려 있습니다. 웹 서버와 프레임워크는 들어오는 URL을 자동으로 디코딩하므로, 인코딩된 형태는 보통 여러분이 읽는 것이 아니라 만들어 내는 것입니다.

유용한 습관은, 완성된 문자열을 한 번에 인코딩하는 대신 URL을 조립하면서 각 동적 조각을 따로 인코딩하는 것입니다. 그러면 구분자는 온전히 유지하면서 모든 값을 안전하게 만들 수 있고, 링크를 깨뜨리는 과소 인코딩과 링크를 손상시키는 이중 인코딩을 둘 다 비껴갈 수 있습니다.

자주 묻는 질문

URL 인코딩은 실제로 무엇을 하나요?
공백, 앰퍼샌드, 물음표처럼 URL에서 안전하지 않거나 예약된 문자를 %20 같은 퍼센트 인코딩 등가로 바꿔, 링크가 올바르게 전송되도록 합니다.
이 도구로 인코딩과 디코딩을 모두 할 수 있나요?
네. 같은 도구로 일반 텍스트를 URL에 안전한 형식으로 인코딩하고, 퍼센트 인코딩된 문자열을 원래의 읽을 수 있는 텍스트로 디코딩할 수 있습니다.
특수문자와 다른 언어도 처리하나요?
네. 악센트 문자와 비라틴 문자를 포함한 비ASCII 및 Unicode 문자를 UTF-8 바이트 시퀀스를 사용해 올바르게 퍼센트 인코딩합니다.
전체 URL을 인코딩하는 것과 단일 값을 인코딩하는 것의 차이는 무엇인가요?
전체 URL을 인코딩하면 슬래시와 구조가 보존되고, 단일 쿼리 값을 인코딩하면 / 와 ? 같은 문자까지 이스케이프됩니다. 링크를 깨뜨리지 않도록 그에 맞게 입력을 선택하세요.
내 데이터가 비공개이고 이 도구는 무료인가요?
네. 인코딩과 디코딩이 브라우저 안에서 전부 이루어지므로 아무것도 서버로 전송되지 않으며, 가입 없이 무료로 사용할 수 있습니다.

관련 도구

이런 편리한 도구도 함께 사용해 보세요

Base64 인코딩 / 디코딩

JWT 디코더

HTML 인코더 / 디코더

HTML을 텍스트로 변환

JSON 포매터

정규식 테스터