mehtod Get 방식의 Encoding Decoding 방식. [URLDecoder, URLEncoder]

2011.04.08 15:45JavaScript/script

Ajax.request 방식을 쓸땐 문제 없더니,
Ajax.update 방식으로  사용하니 한글이 깨진다. 이런 십장..

*스크립트에서 인코딩 하는 방법은 내부 함수로 제공하는 3가지가 있다.
1. escape()
2. encodeURI ()  : 특수문자 제외한 [;?!@#$%^&*()_+]  
                           나머지 문자 인코딩 URL전체 인코딩 시에 사용하라고 권고
3. encodeURIComponent() : 알파벳, 숫자, Alphanumeric Characters 외의 대부분의 문자를 대부분 인코딩

디코딩 하는 함수는 en 이아니라 de로써서 사용하면됨

<스크립트 >
function 인코딩테스트(){
params = {
username = encodeURIComponent(document.getElementsById('user_name'));

new Ajax.update(target,{
url : "servletUrl 입력.."
parameter : params,
method : 'get'
evalScript : false.
onComplate : function(){

}) ;
}
</스크립트> 

위와 같이 스크립트에서 encodeURIComponent로 해당 element를 감싸서 서버의 parameter 값으로 보낸다.
그렇다면 뭐 "%EB%8F%99" 대충 이런식으로 암호화 되서 오겠지

그럼 서버 쪽에서는 이렇게 받아사용

.
...생략

@Controller
public  class EncodeDecodeTestCtr extends MuiltActionController{

@RequestMapping(value="/어쩌구저쩌구/어쩌구/어쩌구.저쩌구", method=RequestMethod.GET)
public void encodeDecodeTest(@RequestParam(value="username" , require = false ,              
defaultValue="") String username, HttpServletResponse response){

system.out.println("decoding befor :::" + username);
 
Map<Object, Object> searchMap = new HashMap<Object,Object>();
searchMap.put("username" ,   URLDecoder.decode(username,"UTF-8")) ;


System.out.println("decoding After :::" + username); 


}


이렇게 하면 GET 방식으로 호출해도 한글 안깨진다. 

서버로 안보내고 JSP에서 받아 볼려면 
<스크립트>에서 encodeURIComponent()를  escape(encodeURIComponent(strvalue))로  한번더 감싼다.
근데 뭐 이럴때 깨지는경우가 있나?

참고로 GET방식으로 호출하면 한글깨지니 이런게 귀찬타면 POST방식으로 호출할것.

한글이 깨지때 확인사항.
1. DB에 값이 깨진 채로 들어갔는지 확인한다.
2. 화면 서버의 인코딩 값들을 확인한다.
3. GET방식으로 보낸걸 POST로 바꿔 본다.