freezner

[PHP] IE에서 한글명 파일 다운로드시 깨지는 현상 해결 방법

보통 다운로드 기능을 구현할 때 header에 파일 정보를 실어 보내도록 합니다. CI(Code Igniter) 프로젝트를 진행하면서 생긴 문제 였는데 IE 계열에서만 한글명 파일이 깨지는 현상이 있었습니다. 때문에 IE인 경우에만 header를 다르게 처리해줘야 하는 상황이 발생 했습니다.

간단하게 정리하자면 아래와 같습니다.

1. 파일 이름은 UTF-8이 아닌 EUC-KR로 변환 필요
2. Cache-Control: no-cache, must-revalidate 헤더 대신 Cache-Control: must-revalidate, post-check=0, pre-check=0 으로 사용
3. Pragma: no-cache 헤더 대신 Cache-Control: no-cache, 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); 

if($ie) {
   // UTF-8에서 EUC-KR로 캐릭터셋 변경
   $file_name = iconv('utf-8', 'euc-kr', $file_name);

   // IE인 경우 헤더 변경
   header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
   header('Pragma: public');
}else{
   // IE가 아닌 경우 일반 헤더 적용
   header("Cache-Control: no-cache, must-revalidate"); 
   header('Pragma: no-cache');
}

 

Exit mobile version