PHP内容配置文件名错误safari

问题描述 投票:0回答:2

我有一个数据库,我希望用户从中下载数据 我正在尝试下载 mp3 文件。例如,如果文件包含西里尔字符,那么在 Safari 中我会得到文件 ÐÐ¸Ð·Ð½ÐµÑ lite - ÐÑÐ°Ñ talk.mp3,在其他浏览器中我会得到一个普通文件名 Бизнес lite - Краш talk.mp3。这是示例代码。请帮忙,我做错了什么?

`
$src_file = ROOT_PATH . '/files/uploads/' . substr( $track_file['name'], 0, 2) . '/' . $track_file['name'];
if(file_exists($src_file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'. $track_file['title'] . '.mp3"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($src_file));
    ob_clean();
    flush();
    readfile($src_file);
    exit;
`

php download safari mp3
2个回答
0
投票

这在 PHP 中适用于所有浏览器(Chrome、Safari、Firefox、IE11)...

header('Content-Disposition: attachment; filename="' . $fileName . '"; filename*=utf-8\'\'' . rawurlencode($fileName) . ';');


-1
投票

会使用 if else

如果用户代理 Safari 。您可以通过 $_SERVER['HTTP_USER_AGENT'] 找到浏览器名称


$src_file = ROOT_PATH . '/files/uploads/' . substr( $track_file['name'], 0, 2) . '/' . $track_file['name'];
if(file_exists($src_file)) {

if($useragent=='safari'){

header('content-type: application/octet-stream');
header('content-Disposition: attachment; filename='.$src_file);
header('Pragma: no-cache');
header('Expires: 0');
readfile($src_file);

}else{

//your current code

}
© www.soinside.com 2019 - 2024. All rights reserved.