我已将数据库排序规则设置为utf8_unicode_ci
,并设置在CakePHP数据库设置中。
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'xxx',
'login' => 'xxx',
'password' => 'xxx',
'database' => 'thisisdatabase',
'prefix' => '',
'encoding' => 'utf8',
);
}
我设置了这样的下载二进制文件:
$this->viewClass = 'Media';
$params = array(
'id' => $download_list[0],
'download' => true,
'extension' => $download_file_ext,
'path' => $fileDownloadPath . DS,
);
$this->set($params);
当用户上传文件时,文件名将作为unicode-utf8
记录在数据库中。当我通过Chrome,FF下载时,它很好(日语名称仍然完好无损)。但是当我通过IE下载时,文件名是垃圾。虽然文件本身很好(我可以打开它等)。
任何人都知道如何解决这个问题?
答案 0 :(得分:5)
我不确定CakePHP如何处理这种情况,但IE在content-disposition: attachment
的文件头中发送Unicode字母时遇到问题。所以要在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);