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

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

  • BPP
  • 1
  • 7,161
  • 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 16,394
공지 씨아이보드 3 배포 안내 +20 icon 관리자 11-09 18,262
71 글수정 시 글자가 깨지고 줄바꿈이 안됩니다. saltypoet 07-08 59
70 ci보드 사이트 글쓰기 시 애디터의 인용구 기능을 쓰면 코드가 같이 vi… g901 06-02 479
69 페이스북 로긴 고장 미친놈이자꾸해킹합니다 03-29 1
68 아에 실행이 안됩니다 junseopWhang 11-28 395
67 예치금 deposit 컨트롤러 오류 shiaru 10-08 4
66 틀린글자 배고파 05-11 1
65 ciboard_pro 3.0.3 관리자 회원정보 수정 배열선언 문제 -71 12-18 1
64 설치할때 문제 있네여 히팝디벨롭 03-24 1
63 facebook plugin 버전업 필요 도시인 02-08 4
62 사소한거 하나 +1 ceoseo 12-06 5
61 다음주소 로딩의 건. ceoseo 12-05 2
60 사소한 버그들 --> 각종 태그 안닫힘류. +1 ceoseo 12-03 5
59 5MB 넘는 이미지 첨부 또는 사진넣기로 추가시 +1 적토마 11-19 3
58 기본 폰트 +1 스마일 11-18 741
57 글 수정시 파일 교체하면 모든 게시글의 파일이 교체되는 문제 +2 강건너사자 11-15 739
56 안녕하세요. +1 위토즈소프트 11-15 4
55 Config_model.php > meta_update() 의 empty… +3 강건너사자 11-14 925
54 thumbnail directory 퍼미션 스마일 11-07 5
53 Social Login : naver 에러 +1 스마일 11-03 715
52 https 웹사이트 패치 스마일 11-03 906