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

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

  • BPP
  • 1
  • 7,109
  • 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 운영을 시작합니다 +12 icon 관리자 11-19 15,873
공지 씨아이보드 3 배포 안내 +20 icon 관리자 11-09 17,732
50 comment 출력에 strip_tags 추가 부탁. +3 스마일 10-29 700
49 Social login 에러 +1 스마일 10-04 743
48 오류제보합니다. +1 아기새 10-02 4
47 dhtml_editor_helper Parse error Chris 08-09 1,387
46 게시물에 이미지 등록 후 삭제시 HJJ 07-28 1,366
45 글을 입력하고 수정/삭제/목록/답변 +1 마젠토 06-29 1,422
44 게시판 수정시 저장을 누를때 마젠토 06-29 1,172
43 베이직에서 프리미엄버전 (2.0) 으로 패치 업그레이드시 데이터베이스 … +1 Tammy 06-22 1,269
42 안녕하세요 +1 팔팔이 06-21 7
41 회원가입시 +1 팔팔이 06-21 7
40 Board_post 컨트롤러 nimrh2k 10-07 4
39 배너관리 - 배너수정시 캐시삭제오류 +2 nimrh2k 07-06 11
38 웹 관련 보고서 입니다. 김남훈 05-30 8
37 force_download 시 IE 와 EDGE 에서 한글 깨짐 현상 +1 BPP 05-28 7,110
36 게시판관리 댓글기능 : 댓글 입력시 이모티콘 +1 주니7 05-17 9
35 소소한 코딩 미스.. +1 주니7 05-10 9
34 버그 신고합니다. +2 쓰나리 04-04 5
33 상세보기 페이지 진입 시 js 에러 +1 김도완 03-15 9
32 쪽지오류 신고 +2 Chris 03-14 5
31 모바일에서 쪽지보기시 서버오류가 발생합니다. +8 나이수 03-04 10