본문 바로가기

프로그래밍

CSV for Excel 데이타를 엑셀파일로 다운로드 받는 기능 (한글깨짐방지)

반응형
UTF-8을 사용할 경우 한글이나 기타언어가 깨지는 현상이 발생합니다. CSV로 저장할때.

header에서 파일명만 엑셀로 하여 엑셀파일로 다운받을수 있게할수도 있지만 엑셀2007에서 사용하였을땐
다운로드후 파일을 열때 에러는 아니지만 경고메세지가 뜹니다.
예전 기억으론 오피스 2003에선 이런 메세지가 안떴던것 같지만...
그래서 CSV for Excel 방식을 사용하기로 하였습니다. (구글분석툴에서 힌트를 얻었습니다. 그리고 검색을 했죠^^)

가장 좋은 방법은 phpExcel을 사용하면 되지만 php_zip extension이 필요하고 서버설정이 바뀌어야 해서 사용하지 못하였습니다.. 하지만 phpExcel은 추천할만한 좋은 오픈소스입니다.
서버를 직접 운영하시는 분은 phpExcel을 사용하시면 될것 같습니다.

다운로드링크:  http://phpexcel.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=10717
튜토리얼링크: http://g-ernaelsten.developpez.com/tutoriels/excel2007/

CSV 타입으로 저장할때 UTF-8에서 한글깨짐을 처리하려면 두가지 방식이 있습니다.
iconvmb_convert_encoding 그런데 mb_convert_encoding도 서버설정이 필요하더군요.
서버를 건드릴 수 없는 환경이어서 iconv로 처리하기로 하였습니다.

아래가 그 예제입니다.

-----------------------------------------------------------------------------------------------

<?php
$time = date("Ymd",time());
$file = "my_statistics_".$time.".csv";

header("Content-type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=$file");
header("Content-charset=utf-8");

function excelCode($tmpString){
    $tmpString =  iconv( 'UTF-8', 'UTF-16LE//IGNORE', $tmpString );
    print $tmpString;
}
echo chr(255).chr(254);

excelCode("#===================\n");
excelCode("한글이 깨지지 않아요.\n");

$sql = "select * from table where domain='$domain' order by reg_date desc"
$res=& $db->query($sql); 
while($res->fetchInto($row)){
//구분자를 탭으로 함.
$strRow1 = $num."     ".$row[userName]."    ".$row[userEmail]."    \n";
excelCode($strRow1);
}
?>
-----------------------------------------------------------------------------------------------

저처럼 서버환경이 제한적일때 사용에 도움이 되었으면 합니다.
주의할점이 한가지 있다면 마지막 출력부분이후에 어떤 코드도 넣지마세요. 주석처리한 코드라 하더라도 말입니다.
궁금하시면 어떤 결과가 나오는지 한번해보세요^^


도움이 되셨다면 코멘트 부탁드려요~


반응형

'프로그래밍' 카테고리의 다른 글

W3C 플래시코드 (W3C Validated Flash code)  (0) 2009.09.24
클릭하면 DIV 가 Show/Hide  (0) 2009.09.22
C#시작을 위한 환경구축  (0) 2009.09.03
Session variables without cookies  (0) 2009.09.03
PHP 정규표현식 Example.1  (0) 2009.09.02