PHP Force Скачать имя файла с пробелами

Хорошо, похоже, у меня проблема с тем, чтобы мой скрипт загружал файл с правильным именем файла.

Если я уберу пробелы и тире, который выглядит так

if($type == 'mc'){
$file_name = $_POST['Ids'];
$file_name = str_replace('-', '', $file_name);
$file_name = str_replace(' ', '&', $file_name);
$url = base64_decode($stream);
$file_url = "scd.php?stream=".$url."&name=".$file_name."";
$url = array('url' => $file_url);
echo json_encode($url);
}

Вот scd.php

<?php
$file = $_GET['stream'];
$name = $_GET['name'];
header("Content-type: application/x-file-to-save");
header("Content-Disposition: attachment; filename=".$name.".mp3");
readfile($file);
exit();
?>

Это приведет к загрузке, но при этом будет сохранено только первое слово в отправленном имени. Так сказать имя Your Song Here он хочет сохранить его как Your.mp3 но если я уберу str_replace от $file_name переменная, то он попытается сохранить файл как Your без расширения, но все еще только первое слово.

Мне нужно, чтобы пройти весь $file_name переменная напр. Your Song Here.mp3 и все еще сохраните это как файл MP3.

Я не совсем уверен, что я делаю неправильно

0

Решение

Оберните имя файла в кавычки, что-то вроде

header("Content-Disposition: attachment; filename=\"${name}.mp3\"");

(не могу вспомнить, как избежать «s в строке в php).

Я считаю, что это на самом деле требуется спецификацией HTTP.

3

Другие решения

Вы пытаетесь использовать объект HTML (&amp;) в вашем имени файла. Не делай этого. Кроме того, не используйте пробелы в именах файлов. Вам лучше заменить ' ' с _:

$file_name = str_replace(' ', '_', $file_name);

Тогда ваше имя файла будет безопасно передаваться по URL без какой-либо специальной кодировки или необходимости экранирования.

2

По вопросам рекламы [email protected]