"공백 인코딩이 두 가지야?"
URL 자료 보다 보면 공백이 %20으로 적힌 곳도 있고 +로 적힌 곳도 있다. 두 표기 모두 공백 인코딩인데 왜 두 가지일까. 한 번 풀어 본다.
%20의 자리
%20은 RFC 3986 표준 URL 인코딩. URL 경로(path)에서 공백을 표현하는 표준 방식. https://example.com/hello%20world.
+의 자리
+는 폼 데이터(application/x-www-form-urlencoded) 인코딩. URL 쿼리 스트링이나 POST 본문에서 공백을 표현. ?q=hello+world.
같은 결과, 다른 자리
- 경로 → %20 표준
- 쿼리 → + 또는 %20 모두 가능
- POST 폼 → + 표준
실수 자주 하는 지점
+를 쿼리 스트링이 아닌 경로에 쓰면 일부 서버가 다르게 처리. 안전하게 가려면 경로는 %20, 쿼리는 +로 통일하는 흐름이 무난.
도구 활용
도구는 보통 %20 표준 인코딩 결과를 보여 준다. 폼 데이터용 + 인코딩이 필요하면 별도 옵션 확인. URL 인코더는 표준 인코딩 위주, 결과 활용 시 자리에 맞춰 변형.
실제 코드 예시
- JavaScript encodeURIComponent → %20
- Java URLEncoder → +
- Python urllib.parse.quote → %20
- PHP urlencode → +
언어별 기본 함수 결과가 다르다는 점도 인식 필요.
디코딩 시 주의
+를 디코딩하면 공백으로. %20도 공백으로. 두 표기 모두 디코딩 결과는 같다. 퍼센트 인코딩 도구로 양방향 처리.
마무리
%20과 +는 같은 공백을 다르게 표현. 자리에 따라 적절한 표기를 쓰면 호환성 부담이 작아진다.