force_download 시 IE 와 EDGE 에서 한글 깨짐 현상
첨부 파일 다운로드시 한글첨부일겨우 파일명이 깨지는 현상이 있어서 수정 해보았습니다.
보시고 적용 해서 배포 해주심 완젼 좋을듯 해서^^
파일 경로: /_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);