반응형
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를 바꾸어주느냐 마느냐에 있는 것이다.



반응형

+ Recent posts