PHP

[PHP] DB 데이터 CSV 파일 저장 (한글깨짐)

chsr 2021. 7. 8. 15:52
728x90
반응형

■ PHP DB 데이터 CSV 파일 저장 (한글깨짐)


■ 참고

* CSV 저장 시 콤마(,)로 컬럼을 구분, "\r\n"을 이용해 줄바꿈을 할 수 있음 
(콤마가 아닌 탭공백으로 구분할 수도 있지만 하기 예제는 콤마로 구분)

* 컬럼값이 숫자일 경우 0으로 시작할 경우 데이터가 상이하게 노출되는 현상이 발생할 수 있음 
> 이 때 데이터 앞에 ' (작은따옴표)를 붙여주면 표시형식이 변환되지 않음


■ 예제

CSV 다운로드 시 리스트 캡처본

<?php
  // DB 연동
  $mysqli = new mysqli( $localhost, $user, $password );
  $mysqli -> set_charset("utf8"); 

  // 파일명 지정
  $filename = "test_" . date("Ymd") . ".csv";

  header('Content-Type:text/css;charset=EUC-KR;');
  header('Expires: 0');
  header('Content-Transfer-Encoding: binary');
  header('Cache-Control: private, no-transform, no-store, must-revalidate');
  header("Content-disposition: attachment; filename=" . $filename);

  // 쉼표 필터 함수, 한글화 처리 (한글깨짐방지)
  function filterData($string) {
      $string = iconv("UTF-8","EUC-KR",($string));
      return $string;
  }

  // 컬럼명
  $aTitles = array( "이름", "나이", "성별" );
  $csv_dump = filterData(implode(",", $aTitles));

  // DB 데이터 가져오기
  $sql ="
      SELECT user_name, user_age, user_sex 
      FROM table_name
  ";
  $result = mysqli_query($mysqli, $sql);
  while( $row = mysqli_fetch_assoc($result) ){
      $csv_dump .= "\r\n";	// 줄바꿈
      $csv_dump .= filterData($row['name']) . "," . filterData($row['age']) . "," . filterData($row['tel']);	// 콤마(,)로 컬럼 구분
  }
  
  echo $csv_dump;
  exit;
?>
728x90
반응형