반응형
PHP 에서 JQuery 를 이용하여 Ajax를 이용할때 아래와 같은 방법으로 하는것이 가장 이상적이다.

내가 테스트 한 환경은 다음과 같다

WAS : euc-kr
DB : Mysql euc-kr
환경이다.


1. Jquery 를 이용하여 Ajax호출한다.
   ( 단 한글데이터의 경우 encodeURIComponent를 이용하여 UTF-8 로 인코딩 시켜야 한다. )


  params = "mode=getMember";
  params += "&user_id=" + form.pass_id.value;
  params += "&name=" + encodeURIComponent(form.pass_name.value); // (1) UTF-8로 인코딩한다.
  params += "&reg_num1=" + form.pass_regnum1.value;
  params += "&reg_num2=" + form.pass_regnum2.value;
  
  $.ajax({
   type : "POST",
   url : "./member_join_logic.php",
   async: false,
   dataType : "text",
   data : params,
   beforeSend : function(xmlHttpRequest){
   },
   success :  function(msg) {  
    
    var data = eval("(" + msg + ")");

    if(data){
     alert(data[0].NAME); // (4) 결과값을 출력한다.
    }else{
     alert("일치하는 회원정보가 없습니다.");
    }
    },
    error : function(xmlHttpRequest, textStatus, errorThrown){
     alert("회원 실명인증 중 오류가 발생하였습니다. [" + textStatus + "]"); 
    }
   });



2. Mysql Data를 조회한다.
   ( 조회시 한글 파라미터 값은 별도로 euc-kr로 다시 인코딩 시켜서 맵핑시킨다. )


3. 결과값을 요청한 페이지로 json_encode 함수를 이용하여 리턴시킨다.


   $SQL  = " SELECT * FROM testDB WHERE 1=1 ";
   if($user_id){ $SQL .= " AND user_id ='".$user_id."' "; }
   if($name){ $SQL .= " AND name ='".decode_cp949($name)."' "; } // (2) EUC-KR로 인코딩하여 DB에 맵핑한다.
   if($reg_num1){ $SQL .= " AND reg_num1 ='".$reg_num1."' "; }
   if($reg_num2){ $SQL .= " AND reg_num2 = sha1('".$reg_num2."') "; }
   
   $result = mysql_query($SQL);

   
   
     while ($row = mysql_fetch_assoc($result)) {         
          for ($i=0; $i < mysql_num_fields($result); $i++) {
              $info = mysql_fetch_field($result, $i);
      $row[$info->name] = decode_utf8($row[$info->name]); // (3) 결과값을 다시 UTF-8로 인코딩한다.
          }
          $rows[] = $row;
       }
     
       echo json_encode($rows); // JSON 으로 리턴한다.


[ 참조 ]
위 예제에서 사용한 인코딩 함수는 아래와 같다.

  /**
 * UTF-8 => CP949 로 디코딩 Function
 */
 function decode_cp949($data){
  return iconv("UTF-8", "CP949", rawurldecode($data)); 
 }
 
 /**
 * CP949 => UTF-8 로 디코딩 Function
 */
 function decode_utf8($data){
  return iconv("CP949", "UTF-8", rawurldecode($data)); 
 }



4. 최초 요청받은 페이지에서는 받은 값을 출력한다.

위 과정처럼 하면 한글 데이터도 정상적으로 DB와 통신 가능하다.

이제 삽질은 제발 그만하자 흑흑흑....

이상 JQuery를 이용하여 PHP에서 ajax통신시 한글의 문제점 해결방법이다.

반응형

'Program > PHP' 카테고리의 다른 글

[ PHP 파라미터 출력하여 알아보는 방법 ]  (0) 2011.05.30
[ PHP 에서 DB결과 처음포인터 위치하기 ]  (0) 2010.08.28
[ PHP E-mail 전송 ]  (6) 2010.07.03
PHP Excel Download Module  (21) 2010.06.22
[ PHP5 공통모듈 ]  (0) 2010.06.10

+ Recent posts