![](/img/trans.png)
[英]PHP: RFC-2231 How to encode UTF-8 String as Content-Disposition filename
[英]How to use the content-disposition header to set a downloaded UTF-8 filename?
我將我的文件存儲在 Amazon Cloud Drive 上。 並且可以選擇將response-content-disposition
為來自亞馬遜的直接鏈接。
從API:
response-content-disposition
:(可選)如果指定,則響應的內容處置將設置為此值
我需要設置它下載mp3文件。 我不需要在瀏覽器上播放它。
我想設置下載的文件名: Эльбрус Джанмирзоев - Кавказская любовь.mp3
我嘗試了很多方法... Urlencode... Urlencode + http 構建查詢等...
但現在的結果是:下載文件時, Эльбрус+Джанмирзоев+-+Кавказская+любовь.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
但我需要用這個名字保存文件:
Эльбрус Джанмирзоев - Кавказская любовь.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');
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.