본문 바로가기

IT

JSP 파라미터 특수문자 인코딩 처리


자바에서 파일 다운로드 기능을 구현했는데 일부 파일은 다운이 되질 않는 것이다.



원래 파일명이 R&D연구.PDF 면 파일 시스템에선 201901223123123_PDF로 저장한다.




다시 다운받을 땐 DB에 저장된 파일명이 아닌 실제 파일명으로 변경해줘야 하기 때문에


//downname을 파라미터로 받아온다.
String downname = request.getParameter("downname");
//header에 파일 네임을 써준다.
response.setHeader("Content-Disposition", "attachment; filename=\"" + downname + "\"");


위의 소스를 쓴다.



하지만 downname에 특수문자가 있어서 다운이 되질 않았다.



downname = URLEncoder.encode(downname, "UTF-8").replaceAll("\\+", "%20");


인터넷 익스플로어에선 위의 소스처럼 인코딩을 해주면 잘 작동하는데

일부 파일은 동작하지 않는 것이다.



왜 그런가 했더니 특수문자 때문이었다.

downname에 특수문자 '&'가 들어 있어서 그렇다.


이럴 땐 JSP 즉 자바스크립에서 호출 시 파라미터를 인코딩 해줘야한다.


function encode(url){ var strArr = url.split("downname="); var str = encodeURIComponent(strArr[1]); location.href = strArr[0]+'downname='+str; }


나같은 경우는 downname을 짤라서 배열로 나눈 다음

인코딩해서 다시 붙이는 식으로 사용했다.



R&D연구.PDF로 잘 다운받아짐.

주의할점은 encodeURI는 '&'등 일부 기호를 인코딩하지 못하기 때문에 같이 인코딩할려면

encodeURIComponent를 해줘야 한다.