채택완료

한글이 PC에 따라 깨짐현상이 있습니다.

2015-03-24 (화) 08:13:21 4,486

안녕하세요,  Form 에서 입력받아 값을 패스하여 SQL 쿼리를 실행하는 간단한 php 프로그램을 만들었는데, PC 에 따라 깨지는 경우가 생깁니다.   IE를 사용해서 테스트를 했는데 이런현상이 나타납니다.

즉,   name 을 "홍길동" 으로 받아  srch_name.php 를 콜해서 srch_name.php 에서  $name 값을 사용했습니다.

메타값에 charcter set 을 utf-8 로 했습니다. 

$a = iconv("EUC-K","UTF-8", $name) 을 사용해서  해결했나 싶었는데, 다른 PC에서는 깨집니다.

깨지는 PC에서는  iconv 를 사용하지 않고 단순히 $a = $name 을 사용하면 제대로 보입니다.  (이 경우 iconv 함수를 사용한 PC는 글씨가 깨지구요..ㅠㅠ)

어느 세팅을 바꾸어야 해결이 될까요?

가르침 미리 감사드립니다.

오늘도 좋은하루되세요.

답변 5개 / 댓글 3개

채택된 답변
+20 포인트

  gen_srch.xls.php 화일 자체를 utf-8형식으로 저장

  이 화일에  <meta charset="UTF-8"> 설정은 필요없음

_common 앞쪽에 저렇게 head가 들어가면 안됨

2015-03-24 (화) 19:03:14

<!-- 게시판 검색 시작 { -->
<div class="tbl_head01 tbl_wrap">
<table>
  <tr>
  <td>
  <form name="fsrch" id="fsrch" action="<?php echo $action_url ?>" onsubmit="return fsrch_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off" style="width:<?php echo $width; ?>">  
    <input type="hidden" name="myname" id="myname1" value="<?php echo $member['mb_name'] ?>">
    <input type="hidden" name="mylevel" id="mylevel1" value="<?php echo $member['mb_level'] ?>">
         &nbsp;&nbsp;과정: <input type="text" name="ban1" value="<?php echo $ban1 ?>" id="ban1" class="frm_input" size="4" maxlength="4">
         &nbsp;&nbsp;학생: <input type="text" name="std1" value="<?php echo $std1 ?>" id="std1" class="frm_input" size="6" maxlength="10">
         &nbsp;&nbsp;교사: <input type="text" name="tch1" value="<?php echo $tch1 ?>" id="tch1" class="frm_input" size="5" maxlength="10">
         &nbsp;&nbsp;시작일: <input type="text" name="sdt1" value="<?php echo $sdt1 ?>" id="sdt1" class="frm_input" size="10" maxlength="10">
         &nbsp;&nbsp;마감일: <input type="text" name="edt1" value="<?php echo $edt1 ?>" id="edt1" class="frm_input" size="10" maxlength="10">&nbsp;(yyyy.mm.dd)
   &nbsp;&nbsp;<input type="submit" value="수업일지조회" class="btn_submit">
    </form>
  </td>
  </tr>
 </table>
</div>
<!-- } 게시판 검색 끝 -->

<!-- gen_srch.xls.php 를 콜하는 부분 -->

<script type="text/javascript">
function fsrch_submit(f)
{
    var f = document.fboardlist;
 var sdt = document.getElementById('sdt1').value;
    var edt = document.getElementById('edt1').value;
 var tch = document.getElementById('tch1').value;
    var std = document.getElementById('std1').value;
 var ban = document.getElementById('ban1').value;
    var myname = document.getElementById('myname1').value;
    var mylevel = document.getElementById('mylevel1').value;
 var stract = "./gen_srch.xls.php?bo_table=logbook";
 var str1 = "&sdt="+sdt;
 var str2 = "&edt="+edt;
 var str3 = "&tch="+tch;
 var str4 = "&std="+std;
 var str5 = "&ban="+ban;
 var str6 = "&myname="+myname;
 var str7 = "&mylevel="+mylevel;

//    f.sw.value = "xls";
//    f.target = "xls";

 stract =   "./gen_srch.xls.php?bo_table=logbook"+str1 + str2 + str3 + str4 + str5 + str6 + str7;
 window.open(stract, "LIST", "left=50, top=50, width=700, height=550, scrollbars=1");
//   f.action = stract
//  f.submit();
}

<!--  gen_srch.xls.php -->

문제를 해결해볼려고 iconv 함수를 사용해보기도 했습니다.

<head>
<meta charset="utf-8">
</head>
<?
include_once("./_common.php");

$today = date("Y-m-d");

$flg = 0;
$cond0 = "select * from {$write_table} ";

if ($mylevel > 4) {
 if (strlen($tch) > 1) { 
//  $cond1 = iconv("EUC-KR","UTF-8"," where wr_name = '{$tch}' ");
  $cond1 = " where wr_name = '{$tch}' ";
  $flg = 1;
 }
 else { $cond1 = "";  }
}
else {
// $cond1 = iconv("EUC-KR","UTF-8"," where wr_name = '{$myname}' ");
 $cond1 = " where wr_name = '{$myname}' ";
 $flg = 1;
}

if (strlen($std) > 1) { 
// if ($flg == 1) { $cond2 = iconv("EUC-KR","UTF-8"," and wr_subject = '{$std}' "); }
// else { $cond2 = iconv("EUC-KR","UTF-8"," where wr_subject =  '{$std}' "); }
 if ($flg == 1) { $cond2 = " and wr_subject = '{$std}' "; }
 else { $cond2 = " where wr_subject =  '{$std}' "; }
 $flg = 1;
}
else { $cond2 = ""; }

if (strlen($ban) > 1) { 
// if ($flg ==  1) { $cond3 = iconv("EUC-KR","UTF-8"," and wr_2 = '{$ban}' "); }  
// else { $cond3 = iconv("EUC-KR","UTF-8"," where wr_2 = '{$ban}' "); }
 if ($flg ==  1) { $cond3 = " and wr_2 = '{$ban}' "; }  
 else { $cond3 = " where wr_2 = '{$ban}' "; }
 $flg = 1;
}
else { $cond3 = ""; }

if (strlen($sdt) > 1) { 
// if ($flg == 1) { $cond4 = iconv("EUC-KR","UTF-8"," and wr_5 >= '{$sdt}' "); }
// else { $cond4 = iconv("EUC-KR","UTF-8"," where wr_5 >= '{$sdt}' "); }
 if ($flg == 1) { $cond4 = " and wr_5 >= '{$sdt}' "; }
 else { $cond4 = " where wr_5 >= '{$sdt}' "; }
 $flg = 1;
}
else { $cond4 = ""; }

if (strlen($edt) > 1) { 
// if ($flg == 1) { $cond5 = iconv("EUC-KR","UTF-8"," and wr_5 <= '{$edt}' "); }
// else { $cond5 = iconv("EUC-KR","UTF-8"," where wr_5 <= '{$edt}' "); }
 if ($flg == 1) { $cond5 = " and wr_5 <= '{$edt}' "; }
 else { $cond5 = " where wr_5 <= '{$edt}' "; }
 $flg = 1;
}
else { $cond5 = ""; }

$cond = $cond0 . $cond1 . $cond2 . $cond3. $cond4. $cond5. " order by wr_subject, wr_5 desc;";
 echo "<$cond1>$cond2<$cond3>$cond4<$cond5><br>";
 echo "<br>";

// $sql = "select * from {$write_table} where wr_10 = '0' and wr_5 >= '{$sdt}' and wr_5 <= '{$edt}' order by wr_name, wr_subject";
// $sql = "select * from {$write_table} where wr_5 >= '{$sdt}' and wr_5 <= '{$edt}' order by wr_name, wr_subject";

$ii = 1;
$row = mysql_query($cond);
?>

<b>수업일지조회 &nbsp;&nbsp<?php echo "($sdt ~ $edt)" ?></b><br>
<table border=1 width=100%>
  <tr>
    <td width=7% align=center>#</td>
    <td width=10% align=center>과정</td>
    <td width=10% align=center>학생</td>
    <td width=13% align=center>교사</td>
    <td width=15% align=center>수업일</td>
    <td width=10% align=center>그룹</td>
    <td width=10% align=center>OT</td>
    <td width=15% align=center>입력일</td>
    <td width=10% align=center>ID</td>
  </tr>
<?
 while ($rcd = mysql_fetch_array($row)) {
 ?>
  <tr>
    <td align=center><?php echo $ii; ?></td>
    <td align=center><?php echo $rcd[wr_2]; ?></td>
    <td align=center><?php echo $rcd[wr_subject]; ?></td>
    <td align=center><?php echo $rcd[wr_name]; ?></td>
    <td align=center><?php echo $rcd[wr_5]; ?></td>
    <td align=center><?php echo $rcd[wr_3]; ?></td>
    <td align=center><?php echo $rcd[wr_4]; ?></td>
    <td align=center><?php echo substr($rcd[wr_datetime],0,10); ?></td>
    <td align=center><?php echo $rcd[wr_id]; ?></td>
 </tr>
<?
 $ii = $ii + 1;
 }
?>
</table>​
​​

흠.. 아무래도 인코딩이 잘못된거 같은데.. 익스플로러메뉴 중 보기 -> 인코딩 에서 두 컴퓨터의 차이점이 있나

확인해보세요. 테스트페이지라도 있으면 금방 풀릴거 같은데.. 흠.. 

답변에 대한 댓글 1개

제가 닉네임처럼 모든게 서툴어서.... 죄송. 위에 해당되는 허접한 소스를 올렸습니다. 함 봐주시면 고맙겠습니다.

메타태그로 인코딩을 지정해보셨나요?

Copy
<head><meta charset="UTF-8"></head>


답변에 대한 댓글 1개

예, 메타태그 지정했구요. 다음줄에 include_once("./_common.php"); 를 넣었습니다. 그런데, 한 PC에서는 잘동작하는데, 다른 PC에서는 iconv ("euc-kr", "utf-8",..) 해야 작동됩니다. 이럴경우, 잘되던 PC는 안되구요ㅠㅠ
EUC-KR로 해야지 않나요?

답변에 대한 댓글 1개

euc-kr 로 해보면 더 많이 꼬입니다ㅠㅠ 감사.

답변을 작성하려면 로그인이 필요합니다.