일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바스크립트
- html5
- php 취약점
- 안드로이드 gcm
- 자동 생성
- C#
- WebView
- 안드로이드 푸시
- Android
- dovecot
- curl
- mysql
- Mail Server
- xe
- 설치
- 안드로이드 푸쉬
- android 효과음
- soundpool
- roundcube
- PHP
- not working
- chart.js
- C# IO
- 우분투
- FCM
- UML
- php 시큐어코딩
- javascript
- 안드로이드
- 폼메일
- Today
- Total
그러냐
[PHP]CSV파일 다운로드, 한글 깨짐, UTF-8 BOM 본문
1. csv형식으로 파일을 만들었다.echo "1","2015-04-28","데이터 정상 입력";
2. 웹페이지에는 제대로 출력 된다.
"1","2015-04-28","데이터 정상 입력"
3. csv파일로 다운로드 할 수 있게 만든다.header('Content-type: text/csv; charset=UTF-8'); header("Content-disposition: attachment; filename=test.csv"); echo "1","2015-04-28","데이터 정상 입력";
4. 다운로드 해보니 제대로 출력된다.
"1","2015-04-28","데이터 정상 입력"
5. 엑셀로 해당 csv 파일을 열어보니 한글이 깨진다!!
1 | 2015-04-28 | ?붾젅?ㅽ?-?ㅻ룞泥? |
2,3,4번에서 글자가 깨지는 경우는 해당 페이지나, 출력 문자열의 캐릭터셋을 조정하면 쉽게 고칠 수 있다.
하지만 5번에서 글자가 깨지는 경우는 아무리 캐릭터셋을 맞춰도 해결 되지가 않는다.
이럴 경우에는 데이터 출력 전에 아래와 같이 UFT-8 BOM을 넣어주면 엑셀에서도 제대로 보일 것이다.header('Content-type: text/csv; charset=UTF-8'); header("Content-disposition: attachment; filename=test.csv"); echo "\xEF\xBB\xBF"; echo "1","2015-04-28","데이터 정상 입력";
그럼 여기서 알아두어야 할 것이 있는데, BOM(Byte Order Mark)이란.. 유니코드에서 엔디안을 구별하기 위해 사용되는 문자라고 한다.
참고 : http://ko.wikipedia.org/wiki/바이트_순서_표식
뭐 쉽게 말해서, 문서 맨 앞에 눈에 보이지 않는 특정한 바이트를 넣어서 이것을 해석하게 함으로써 해당 문서가 제대로 된 캐릭터셋 값을 가지도록 하는 것이다.
BOM 표
EncodingRepresentation
UTF-8 | EF BB BF |
UTF-16 빅 엔디안 | FE FF |
UTF-16 리틀 엔디안 | FF FE |
UTF-32 빅 엔디안 | 00 00 FE FF |
UTF-32 리틀 엔디안 | FF FE 00 00 |
SCSU | 0E FE FF |
UTF-EBCDIC | DD 73 66 73 |
BOCU-1 | FB EE 28 |
출처 : http://b1ix.net/201
'php' 카테고리의 다른 글
PHPExcel Exception not found 이미지 첨부시 오류 (0) | 2021.02.03 |
---|---|
php continue Warning 뜨는 경우 (0) | 2020.11.05 |
curl_multi를 이용한 병렬처리 (0) | 2019.11.11 |
[PHPEXCEL] phpexcel 사용법 (0) | 2019.10.24 |
네이버 스마트 에디터 이미지 리사이즈 (3) | 2019.04.03 |