티스토리 뷰

[방법 1 - 폼은 euc-kr 처리쪽은 utf-8]

Autocompleter 를 사용하려 했을때
firebug 를 통해 쿼리문자열이 한글일때 깨지는것을 확인할 수 있다.

Autocompleter 는 prototype.js 의 Ajax.Request 를 통해 질의를 하는데
script.aculo.us 의 controls.js 에서 encodeURIComponent 인코딩 한번,
prototype.js 에서 또한번 인코딩을 해서 질의어가 깨져버린것이다.
물론, 영어는 잘된다. (영어의 우수성?)
또한 폼과 처리 페이지 모두 utf-8 인코딩 페이지라도 잘 작동한다.

다만, 부득이하게 기존 문자셋 환경 변경 없이 script.aculo.us 를 사용하려고 하는 나와같은 경우
아래와 같이 controls.js 를 패치해야 한다.

{ 모든 encodeURIComponent() 가 쓰여진곳에서 함수를 제거한다. }

var entry = this.options.paramName + '=' + this.getToken();
//var entry = encodeURIComponent(this.options.paramName) + '=' + encodeURIComponent(this.getToken());

parameters: 'editorId=' + this.element.id,
//parameters: 'editorId=' + encodeURIComponent(this.element.id),


패치이후 Autocompleter 의 Classic ASP 사용 예제

-----------------------------[ test.htm ]-----------------------------
에디터에서 ANSI 또는 euc-kr 저장
---------------------------------------------------------------------
<html>
<head>
 <meta http-equiv="Content-Type" content="text/ html; charset=euc-kr">
 <style type="text/css">
   div.autocomplete {position:absolute; width:250px; background-color:white; border:2px solid #888; margin:0px; padding:0px; height:80px; overflow:auto;}
   div.autocomplete ul {list-style-type:none; margin:0px; padding:0px;}
   div.autocomplete ul li.selected { background-color: #ffb;}
   div.autocomplete ul li {list-style-type:none; display:block; margin:0; padding:2px; height:20px; cursor:pointer;}
 </style>
 <script src="./js/prototype.js" type="text/javascript"></script>
 <script src="./js/scriptaculous.js" type="text/javascript"></script>
</head>
<body>
 <form name="test">
 <input type="text" id="autocomplete" name="autocomplete_parameter"/>
 <div id="autocomplete_choices" class="autocomplete"></div>
 </form>
 <script type="text/javascript">
  new Ajax.Autocompleter("autocomplete", "autocomplete_choices", "test1.asp", {});
 </script>
<body>
</html>

-----------------------------[ test.asp ]-----------------------------
에디터에서 utf-8 저장
---------------------------------------------------------------------
<% @LANGUAGE="VBSCRIPT" CODEPAGE="65001" %>
<%
Response.Charset = "UTF-8"

'// Ajax.Autocompleter 는 POST 전송을 한다.
If Request.Form("autocomplete_parameter") = "한글" Then
%>
<ul>
  <li>이것은 한글 결과</li>
</ul>
<% End If %>


서버에서 test.htm 브라우저로 로딩하고 '한글' 을 입력해본다.


[방법 2 - 폼과 처리 모두 euc-kr]

prototype.js , controls.js , dragdrop.js 파일의

encodeURIComponent(변수); 을
escape(변수).replace(/\+/g, '%2B') 로
모두 수정

댓글