본문 바로가기
front-end/script

JSP에서 URL encode 하는 방법 (특수문자 UTF-8 인코딩)

by moonsiri 2020. 11. 10.
728x90
반응형

param의 값을 UTF-8인코딩하여 값을 넘겨달라는 요청을 받고서 encodeURI() 함수를 사용하여 처리를 했는데 +와 같은 특수문자는 변경이 되지 않았습니다.

let url = "https://moonsiri.tistory.com?id=";
let id = "dj2nd+s&k3j";
console.log(url+id);  // https://moonsiri.tistory.com?id=dj2nd+s&k3j

const encoded = url + encodeURI(id);
console.log(encoded);  // https://moonsiri.tistory.com?id=dj2nd+s&k3j

 

encodeURI() 함수는 URI에서 특별한 뜻을 가진 문자(예약 문자)는 인코딩하지 않기 때문입니다.

예) username:password@www.example.com:80/path/to/file.php?foo=316&bar=this+has+spaces#anchor

 

따라서 encodeURI()는 완전한 URI를 형성하는데 필요한 문자는 인코딩하지 않습니다. 또한, 예약된 목적을 가지지는 않지만 URI가 그대로 포함할 수 있는 몇 가지 문자(비예약 표식)도 인코딩하지 않습니다.

 

이스케이프 하지 않는 문자 : 
	A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #

 

 

1. encodeURIComponent()

만약 예약 문자도 모두 UTF-8인코딩을 하고 싶다면 encodeURIComponent()를 사용하면 됩니다.

 

let url = "https://moonsiri.tistory.com?id=";
let id = "dj2nd+s&k3j";
console.log(url+id);  // https://moonsiri.tistory.com?id=dj2nd+s&k3j

const encoded = url + encodeURIComponent(id);
console.log(encoded);  // https://moonsiri.tistory.com?id=dj2nd%2Bs%26k3j

 

 

2. JSTL c:url

혹은 JSTLc:url 태그를 이용하여 인코딩할 수 있습니다.

 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:url value="https://moonsiri.tistory.com" var="url">
	<c:param name="id" value="dj2nd+s&k3j" />
</c:url>

<a href="${url}">link</a>  <!-- https://moonsiri.tistory.com?id=dj2nd%2Bs%26k3j -->

 

 

 

 

 

 

[Reference]

developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

728x90
반응형

댓글