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
혹은 JSTL의 c: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
반응형
'front-end > script' 카테고리의 다른 글
[Javascript] html 화면 PDF다운로드 (jspdf.js, html2canvas.js) (0) | 2021.01.18 |
---|---|
[javascript] 이미지 용량 줄이기 (이미지 리사이징) Compressor.js (0) | 2020.11.13 |
[javascript] JSON 합치기 Object.assign(a, b) (0) | 2020.10.09 |
[javascript] 뒤로가기 이벤트 onpopstate (0) | 2020.10.09 |
[script] foreach문을 이용하여 json 데이터 key, value 값 꺼내기 (0) | 2020.10.09 |
댓글