2017년 5월 21일 일요일

javascript 함수에서 url을 받아서 파라미터로 넘길 경우의 처리

!! url을 넘길 경우 어떤 경우는 & 부분에서 잘리는 경우가 있다.
!! 이에 대한 대처 방법을 정리하였다.

==============================================================================
예를 들어
%2Fbbs%2Fbbs_list.jsp%3Fcpage%3D1%26bbsid%3D3%26key%3D%26value%3D
의 경우
%2Fbbs%2Fbbs_list.jsp%3Fcpage%3D1
까지만 넘어가진다.
==============================================================================


주의깊게 보아야 할 부분은 "자바스크립트 함수 부분" 이며

rtnUrl = escape(rtnUrl);
rtnUrl2 = escape(rtnUrl2);

위 처럼 인코딩 처리를 했을 경우 다음 페이지에 url 값이 잘리지 않고 넘어가진다.

근데 서버 환경에 따라서 위 부분이 무용지물인 경우도 있었다.
환경이 어떨때 위의 처리를 해 줘야하는지는 파악하지 못했다.


/*
* url 관련 jsp 코드
*/
String rtnUrl = StringUtil.nvl(request.getParameter("rtnUrl")); //링크 주소
rtnUrl = java.net.URLEncoder.encode(rtnUrl, "utf-8"); //리턴 url 인코딩
String rtnUrl2 = StringUtil.nvl(request.getParameter("rtnUrl2")); //댓글리스트로 리턴용 주소
rtnUrl2 = rtnUrl2 + "?idx=" +idx +"&bbsid=" +bbsid;
rtnUrl2 = java.net.URLEncoder.encode(rtnUrl2, "utf-8"); //리턴 url 인코딩


/*
* 버튼 부분
*/
<a href="javascript:fnCPassChk(<%=data.getCmtseq()%>, '<%=rtnUrl%>', '<%=rtnUrl2%>');" title="댓글 삭제">x</a>


/*
* 자바스크립트 함수 부분
*/
//수정/삭제 시도하는 경우 비밀번호 창 띄우기 (등록시 비밀번호를 입력했을 경우)
function fnCPassChk(idx, rtnUrl, rtnUrl2) {
    //alert(escape(rtnUrl)+"----"+rtnUrl);
    //alert(escape(rtnUrl2)+"----"+rtnUrl2);
    rtnUrl = escape(rtnUrl);
    rtnUrl2 = escape(rtnUrl2);
    var url = "/bbs/comments_pass.jsp?idx="+idx+"&rtnUrl="+rtnUrl+"&rtnUrl2="+rtnUrl2;
    var pop = window.open(url,'bbs_pass','width=390, height=200');
    pop.focus();
}