1. 정확한 제품 또는 플러그인 이름
KBoard
2. 상세 내용
안녕하세요.
게시판 첨부파일 다운로드 시 언제부턴가 한글이 깨지는 문제가 발생했습니다.
원본 제목: 구체적이미지20200216
깨진 제목: 구체ì _ì_´ë¯¸ì§_20200216
그래서 KBController.class.php의 파일 다운로드 부분 코드를 챗GPT에게 물어봐서 해결했습니다. 다음 업데이트 때 반영하여 수정해주셨으면 좋겠습니다.^^
역시 파일 인코딩 문제였고, UTF-8 설정해주어 해결되었습니다^^
기존 코드: header('Content-Disposition: attachment; filename="' . $file_info->file_name . '"');
수정 코드: header("Content-Disposition: attachment; filename*=UTF-8''" . rawurlencode($file_info->file_name));
[ChatGPT 답변]
문제는 파일명이 웹 브라우저에 전달될 때 인코딩 문제가 발생하기 때문입니다. 이를 해결하기 위해 파일 이름을 rawurlencode 함수로 인코딩하거나 'Content-Disposition' 헤더의 filename* 매개변수를 사용해야 합니다.
다음은 수정된 코드 일부입니다:
if($ie){
$file_info->file_name = iconv('UTF-8', 'EUC-KR//IGNORE', $file_info->file_name);
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
}
else if($edge){
$file_info->file_name = urlencode($file_info->file_name);
}
else{
header('Pragma: no-cache');
}
header('Content-type: ' . $file_info->mime_type);
// 기존 코드
//header('Content-Disposition: attachment; filename="' . $file_info->file_name . '"');
// 수정된 코드
header("Content-Disposition: attachment; filename*=UTF-8''" . rawurlencode($file_info->file_name));
header('Content-Transfer-Encoding: binary');
header('Content-length: ' . $file_info->size);
header('Expires: 0');
@ob_clean();
@flush();
if($fd = fopen($file_info->full_path, 'r')){
while(!feof($fd)){
echo fread($fd, 4096);
flush();
}
}
위의 수정된 코드에서는 파일 이름을 UTF-8로 인코딩하고 rawurlencode 함수를 사용하여 안전하게 전송할 수 있도록 하였습니다. 이렇게 하면 다운로드 받은 파일의 이름이 제대로 보일 것입니다.
또한 다양한 웹 브라우저에서 잘 작동하는 방법이므로 IE와 Edge에 대한 별도의 처리는 필요하지 않습니다.
[ChatGPT 답변 끝]
안녕하세요~^^
네 오류를 알려주셔서 감사합니다.
저희 쪽에서도 오류를 확인 후에
다음 업데이트에서 오류를 수정해서 업데이트하겠습니다.
고맙습니다.