resin + apache 에서 get방식의 인코딩 문제에 대해 질문 드립니다.
글쓴이: ntwiz / 작성시간: 금, 2006/11/10 - 2:53오후
Fedora5 기반에 Resin 3.0 + Apache 1.3.3 으로 구성하였습니다.
.jsp 인덱스에서 입력란에 "검색어"를 입력하고 submit을 날리면
String q = request.getParameter("param");
으로 값이 받아집니다.
그런데 이를 리스팅을 할 경우
\[ 1 2 3 4 5 6 \]
out.println("<\ a href=?msg="+ q+ "&pageNo="+i +" \ > "+ i+ "\\");
________________ a href=?msg="+ q+ "&pageNo="+i +" \ > "+ i+ "\
으로 처리합니다만,
... msg="+q ... 이부분에서 문제가 생깁니다.
띄어쓰기를 한 한글일경우 , 띄어쓰기 뒤부터의 글자를 잃어버리고 값을 넘깁니다.
그래서 URLEncode.encode(q)로 처리 했음에도
최초 인덱스에서 넘겨받은 (검색어: 네이버 ( %B3%D7%C0%CC%B9%F6 )) 를
URLEncode.encode(q)하게 되면 ( %EB%84%A4%EC%9D%B4%EB%B2%84 )게 되어서
요상한 문자열로 리턴됩니다.
URLEncode.encode()와 URLDecode.decode()만으로도 해결될까요?
이 문제를 어떻게 해결하면 될까요?
도움을 부탁드립니다.
Forums:
.
질문에서 출력 부분이 명확하지 않아서 대충 짐작해 본 것입니다.
문제점이 몇가지 있네요.
1. resin 에서는 GET 으로 넘길 경우 따로 지정하지 않으면 utf-8 로 decode 합니다. get 으로 넘기는 파라미터를 제대로 받기 위해서는 웹 브라우저, resin, html 페이지 등에서 모두 잘 맞춰줘야 합니다.
2. 링크 태그(a)에서 href 속성값을 따옴표(")로 감싸지 않았습니다. 따라서 공백이 있으면 공백 뒤 내용이 빠지겠죠. html에서 속성값은 따옴표로 감싸는 게 표준이니까 따옴표로 감싸는 게 좋습니다.
3. charset 을 지정하지 않는 URLEncoder.encode, URLDecoder.decode 메서드는 deprecated 메서드입니다. charset 을 지정하는 메서드를 쓰십시오. 결과를 보니 utf-8 로 인코딩된 것 같네요.
음
1.
GET방식이란게, URL 뒤에다 붙이는 방식 말씀이신가요?
form 내의 input 태그들의 값을 GET방식으로 보낼때와는 달리 URL을 직접 구성해서 보낼 경우
브라우저 별로도 결과가 차이가 납니다. 대개는 브라우저에 결정된 인코딩을 먼저 시도해 인코드하지만
글자가 특이할 경우 안될 수도 있습니다.
2.
파라미터 잃어버리는 문제는 위에 쓰신 분 말씀이 정답인 것 같습니다만, 레진의 특성에 따른 문제도 고려해 보세요.
레진은 브라우저에서 보낸 스트림 디코드에 실패할 경우 그 파라미터 이후의 파라미터를 모조리 무시하는 경우가 가끔 있습니다.
3.
form submit으로 보내지 않고 URL에 직접 쓰는 파라미터의 경우
자바스크립트로 인코드를 미리 해서 보내는 걸 고려해 보세요.
다만 그럴 때 쓸 수 있는 함수는 escape(unicode), encodeURI(utf-8), encodeURIComponent(utf-8)이 있는데
이 셋이 모두 장단점이 다릅니다. (ajax, 특히 post까지 고려하면 마지막 것이 좋은데.. 쓰기가 불편함)
부랴부랴~~~
부랴부랴~~~
댓글 달기