Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用内容处置标头设置下载的UTF-8文件名?_Php_Header_Content Disposition - Fatal编程技术网

Php 如何使用内容处置标头设置下载的UTF-8文件名?

Php 如何使用内容处置标头设置下载的UTF-8文件名?,php,header,content-disposition,Php,Header,Content Disposition,我正在亚马逊云硬盘上存储我的文件。还有一个选项可以设置响应内容配置,以直接从Amazon链接 从API: 响应内容处置:(可选)如果指定,响应的内容处置将设置为此值 我需要设置它下载mp3文件。我不需要在浏览器上玩它 我想设置下载的文件名:Ббжжзззззззааабб.mp3 我试过很多方法。。。URL编码。。。URL编码+http生成查询等 但现在的结果是:下载文件时,CharStyleбббС+Бжзббббббб+-+Кабзбббб.mp3 下面是我的php代码: <?php

我正在亚马逊云硬盘上存储我的文件。还有一个选项可以设置
响应内容配置
,以直接从Amazon链接

从API:

响应内容处置
:(可选)如果指定,响应的内容处置将设置为此值

我需要设置它下载mp3文件。我不需要在浏览器上玩它

我想设置下载的文件名:
Ббжжзззззззааабб.mp3

我试过很多方法。。。URL编码。。。URL编码+http生成查询等

但现在的结果是:下载文件时,
CharStyleбббС+Бжзббббббб+-+Кабзбббб.mp3

下面是我的php代码:

<?php
    function file_generate_download_link($filename = false, $force = true)
    {
            $json['tempLink'] = 'https://content-na.drive.amazonaws.com/cdproxy/templink/iTwUqoQ3cJXOpj6T8SCDmKwtF37TAENiSLQzy7pTSbkFfJttb';
            $url = $json['tempLink'];
            if($force)
            {
                $data['download'] = 'true';
            }
            if($filename)
            {               
                $data['response-content-disposition'] = ' attachment; filename*=UTF-8\'\''.urlencode($filename).'';
            }
            if(isset($data)) {
                $data = http_build_query($data);
                $url .= '?' . $data;
            }
            return $url;

    }

    echo file_generate_download_link($filename = 'Эльбрус Джанмирзоев - Кавказская любовь.mp3');
?>

此代码返回给我此链接:

如果我输入此链接,Chrome将使用此名称保存此文件:

БббС+жзззз+-+азззааааа+ааааа

但我需要使用以下名称保存文件:

Ббжззззззззззааааааазmp3


我的错在哪里?明白了!我需要使用rawurlencode函数

因此,正确的代码是:

<?php
    function file_generate_download_link($filename = false, $force = true)
    {
            $json['tempLink'] = 'https://content-na.drive.amazonaws.com/cdproxy/templink/iTwUqoQ3cJXOpj6T8SCDmKwtF37TAENiSLQzy7pTSbkFfJttb';
            $url = $json['tempLink'];
            if($force)
            {
                $data['download'] = 'true';
            }
            if($filename)
            {               
                $data['response-content-disposition'] = ' attachment; filename*=UTF-8\'\''.rawurlencode($filename).'';
            }
            if(isset($data)) {
                $data = http_build_query($data);
                $url .= '?' . $data;
            }
            return $url;

    }

    echo file_generate_download_link($filename = 'Эльбрус Джанмирзоев - Кавказская любовь.mp3');
?>


您得到的文件名与您想要的文件名完全相同。你到底在找什么?不,它用加号表示空格。但现在空间是好的:)