2013-06-03 3 views
0

내 데이터베이스 정렬을 utf8_unicode_ci과 CakePHP 데이터베이스 설정으로 설정했습니다.일본 이름 인 경우 IE8 다운로드 파일 이름이 가비지가 됨

$this->viewClass = 'Media'; 
$params = array(
    'id'  => $download_list[0], 
    'download' => true, 
    'extension' => $download_file_ext, 
    'path'  => $fileDownloadPath . DS, 
); 
$this->set($params); 

사용자가 파일을 업로드, 파일 이름이 unicode-utf8으로 데이터베이스에 기록됩니다

class DATABASE_CONFIG { 
    public $default = array(
     'datasource' => 'Database/Mysql', 
     'persistent' => false, 
     'host' => 'xxx', 
     'login' => 'xxx', 
     'password' => 'xxx', 
     'database' => 'thisisdatabase', 
     'prefix' => '', 
     'encoding' => 'utf8', 
    ); 
} 

는이 같은 다운로드 이진 파일을 설정합니다. Chrome에서 FF로 다운로드 할 때 일본어 이름이 그대로 유지됩니다. 그러나 IE를 통해 다운로드 할 때 파일 이름은 가비지입니다. 비록 파일 자체가 괜찮 으면 (나는 그것을 열 수 있습니다 등).

누구나 해결 방법을 알고 계십니까?

+0

http 응답에 적절한 utf 헤더를 설정 하시겠습니까? 렌더링 파이프 라인 전체가 일관성이 있어야합니다. –

+0

@MarcB 그 방법을 설명해 주시겠습니까? 나는 헤더 물건에 대해 잘 모른다. 감사합니다 – Harts

+0

데이터베이스 구성에서 데이터 정렬을 지정할 수도 있습니다. 올바르게 기억한다면 utf8 인코딩을 사용하면 기본적으로 utf8_general_ci 데이터 정렬이됩니다. 시도하고 다른 파일을 저장하고 작동하는지보십시오. – jimiyash

답변

4

CakePHP가이 시나리오를 처리하는 방법에 대해서는 잘 모르겠지만 IE는 content-disposition: attachment의 파일 이름 헤더에 유니 코드 문자를 보내는 데 문제가 있습니다. 그래서 IE에서이 문제를 해결하기 위해, 우리는 헤더에 설정하기 전에 파일 이름을 URL 인코딩해야합니다

$filename = 'someunicodefilename.txt'; 
if(// IE) { 
    $filename = urlencode($filename); 
} 
header('Content-Disposition: attachment; filename="' . $filename . '"'); 

그래서 내가 CakePHP는이를 달성하는 방법을 잘 모르겠지만, 당신이 시도 할 수 있습니다 :

$this->viewClass = 'Media'; 
$filename = 'someunicodefilename.txt'; 
if(// IE) { 
    $filename = urlencode($filename); 
} 

$params = array(
    'id'  => $download_list[0], 
    'name'  => $filename, 
    'download' => true, 
    'extension' => $download_file_ext, 
    'path'  => $fileDownloadPath . DS, 
); 
$this->set($params); 
관련 문제