코드이그나이터 기반 PHP 오픈소스 게시판 : 씨아이보드

force_download 시 IE 와 EDGE 에서 한글 깨짐 현상

  • BPP
  • 1
  • 9,492
  • Print
  • 글주소
  • 2016-05-28 11:37:02

첨부 파일 다운로드시 한글첨부일겨우 파일명이 깨지는 현상이 있어서 수정 해보았습니다.

보시고 적용 해서 배포 해주심 완젼 좋을듯 해서^^

 

파일 경로: /_system/helpers/download_helper.php 

 

여러가지 찾아보고 적용 해보았습니다.

우선 IE 일경우는 헤더를 변경해주었고

EDGE 일경우엔 파일명을 rowurlencode 해주었습니다.

 

line 135)

  // Generate the server headers

  header('Content-Type: '.$mime);

  header('Content-Disposition: attachment; filename="'.$filename.'"');  

  header('Expires: 0');  

  header('Content-Transfer-Encoding: binary');  

  header('Content-Length: '.$filesize);  
  header('Cache-Control: private, no-transform, no-store, must-revalidate');  

 

이부분을 아래 부분으로 바꿔 봤습니다.

 

  // IE인지 HTTP_USER_AGENT로 확인
  $ie = isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false);

  // EDGE인지 HTTP_USER_AGENT로 확인
  $edge = isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'Edge') !== false);

 

  if ($edge){ 

       // edge인경우 파일명 rowurlencode로 인코딩시킴

       $filename = rawurlencode($filename);     

       $filename = preg_replace('/\./', '%2e', $filename, substr_count($filename, '.') - 1);

 

       // edge인 경우의 헤더 변경

       $header_cachecontrol = 'private, no-transform, no-store, must-revalidate';

       $header_pragma='no-cache';

  }else{

       if($ie) {

           // UTF-8에서 EUC-KR로 캐릭터셋 변경

           $filename = iconv('utf-8', 'euc-kr', $filename);

 

           // IE인 경우 헤더 변경

           $header_cachecontrol = 'must-revalidate, post-check=0, pre-check=0';

           $header_pragma='public';

       }else{

           // IE가 아닌 경우 일반 헤더 적용

           $header_cachecontrol = 'private, no-transform, no-store, must-revalidate';

           $header_pragma='no-cache';

       }

  }

 

  // Generate the server headers
  header('Content-Type: '.$mime);
  header('Expires: 0');
  header('Content-Transfer-Encoding: binary'); 

  header('Content-Length: '.$filesize);

 

  header('Cache-Control: ' . $header_cachecontrol);
  header('Content-Disposition: attachment; filename="'.$filename.'"');

  header('Pragma: '. $header_pragma);

        

 

 

버그신고

번호 제목 글쓴이 날짜 조회수
공지 Github 운영을 시작합니다 +13 icon 관리자 11-19 35,316
공지 씨아이보드 3 배포 안내 +20 icon 관리자 11-09 37,496
31 모바일에서 쪽지보기시 서버오류가 발생합니다. +8 나이수 03-04 10
30 오류인가요? +1 가마니 02-20 3
29 CB.Basic.1.4.2 모바일 +1 wincmd 02-05 7
28 업데이트 이후 +1 stormix 02-03 5
27 버그신고 +2 INX 01-27 5
26 ssl 적용 후 레이아웃 깨짐 + 그림파일 로드 안됨 +3 썽민2 01-26 4,973
25 글쌔요 nginx라서 그런지 +3 stormix 01-26 3,402
24 버그는 아닌 것 같습니다만 설치 후 도메인 변경시 +1 썽민 01-20 3,320
23 1.3.8 +2 stormix 01-14 7
22 설치오류 +2 ChrisCheon 01-12 10
21 게시판그룹관리 오류 +1 썽민 12-30 4,089
20 베이직버전 패스워드 찾기 버그 문의 +1 썽민 12-28 2,994
19 읽는 곳(post)에서 페이지 관련 외.. +3 이그나이터 11-30 10
18 스마트에디터 게시글 작성시 썸네일의 링크가 엑박으로 나옵니다. +2 GilbertYu 11-27 6
17 개선 사항 8 +8 Tammy 11-16 11
16 버그신고 7 +3 Tammy 11-16 9
15 버그 리포트 +2 ChrisCheon 11-12 10
14 버그 신고 6 +3 Tammy 11-03 8
13 보그신고. +1 김남훈 10-30 4
12 버그 신고 5 +3 Tammy 10-27 9