반응형
PHP 에서 Json 인코드 하여 한글을 출력시에는 다음과 같이 코드를 짜면된다.

아주 쉽다.

(1) 일반적인 Json 한글 출력방법

  1 <?
  2    require_once "/home/srzero/public_html/airman/wpc/var/global.var.php";
  3
  4    $query="SELECT good.goodsno,link.category,good.goodsnm FROM gd_goods_link link,gd_goods good WHERE link.goodsno = good.goodsno AND good.open=1 AND link.category LIKE '".$category."%' ORDER BY goodsno asc";
  5
  6    $result = db_query($query,$DB_CONNECT);
  7
  8    $rows = array();
  9
 10    $i = 0;
 11    while($r= db_fetch_array($result)){
 12       $rows[] = urlencode($r[goodsnm]);
 13    }
 14
 15    $json_result =  json_encode($rows);
 16    echo urldecode($json_result);
 17
 18 ?>

urlencode / urldecode를 번갈아가며 사용해야지만, 한글이 제대로 출력이 된다.

(2) Ajax 호출시 Json 한글출력법

(2-1) 호출페이지 소스

 function makeProductList(){

      var form = document.frmMember;

      param = "category="+$("select[name=product_step_one]").val()

      $.ajax({
         type : "POST",
         url : "../../../../../wpc/webSrc/php/daemin/productListByCategory.php",
         dataType : "json",
         data : param,
         beforeSend : function(xmlHttpRequest){
         },
         success :  function(msg) {


            for(var i=0; i<msg.length; i++){
               var opt = form.product_step_two.options;
               optTxt = msg[i];
               optVal = msg[i];
               opt[i+1] = new Option(optTxt,optVal);
            }
         },
         error : function(xmlHttpRequest, textStatus, errorThrown){
            alert(textStatus + ", " + errorThrown);
         }
      });

}


(2-2) Json 응답 페이지

<?

   header("Content-Type: text/html;charset=euc-kr");
   header("Content-Encoding: utf-8");

   require_once "/home/srzero/public_html/airman/wpc/var/global.var.php";

   $query="SELECT good.goodsno,link.category,good.goodsnm FROM gd_goods_link link,gd_goods good WHERE link.goodsno = good.goodsno AND good.open=1 AND link.category LIKE '".$category."%' ORDER BY goodsno asc";

   $result = db_query($query,$DB_CONNECT);

   $rows = array();

   $i = 0;
   while($r= db_fetch_array($result)){
      $rows[] = encode_utf8(urlencode($r[goodsnm]));
   }

   echo json_encode($rows);

?>


위 소스에서 보면 header 값의 Content-Encoding을 셋팅하게 되어있다. 저걸 셋팅안해주면 아래 소스에서
 enncode_utf8을 하였다고 하더라도 , 결국 Ajax는 euc-kr로 응답받게 된다.

결국 소스의 최종 goal은 header를 바꾸어주느냐 마느냐에 있는 것이다.



반응형
반응형
일반 Form Page에서 파라미터값에 대해 어떻게 넘어가는지

PHP에서 알아볼 수 있는 방법은 한개밖에없다.

 <PRE>
  <? var_dump($_POST); ?>
</PRE>

위와 같은 방식으로 하면 아래와 같은 데이터가 나온다.

 <html>                                             
<head>                                            
</head>                                           
<body>                                            
<form action="insertOk.php" method="post">        
   <input type="text" name="wow[]" value="t1"><br>
   <input type="text" name="wow[]" value="t2"><br>
   <input type="text" name="wow[]" value="t3"><br>
   <input type="text" name="wow[]" value="t4"><br>
   <input type="text" name="wow[]" value="t5"><br>
                                                  
   <input type="submit" value="send">             
</form>                                           
</body>                                           
</html>
                                   

위 처럼 하였을때

다음 페이지는 이렇게 코딩하면된다.

 <?

    // POST 방식으로 넘어온 값을 전달받는 방법
    var_dump($_POST);


?>


아주 좋은 팀 같다. 이렇게 하니 결과물이 아래처럼 나온다.

 array(1) { ["wow"]=> array(5) { [0]=> string(2) "t1" [1]=> string(2) "t2" [2]=> string(2) "t3" [3]=> string(2) "t4" [4]=> string(2) "t5" } }

이렇게 보면 WOW라는 놈이 Array로 넘어오는 것을 확인 할 수 있다. ㅋㅋㅋ

이상 PHP간략한 팁이었음.

반응형
반응형
PHP에서 DB결과를 while문을 통해 뿌리고 난뒤에

다시한번 해당 변수를 사용하고 싶은 경우가 많다.

이럴경우 메소드를 못찾아서 해맸는데

아래 메소드를 이용하면된다.

즉 아래 메소드를 사용하게 되면, Iterator 와 같은 선택 값이 가장 맨 앞단으로

초기화 된다.

 mysql_data_seek($email_selectList, 0);

요거 못찾아서 1시간 헤맸넹 ㅋㅋㅋㅋㅋ
반응형
반응형
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