Firefox a des problèmes lors du téléchargement avec un espace dans le nom du fichier

il semble que firefox ait un problème avec les espaces dans le nom du fichier à télécharger...

header( 'Content-Type: text/csv' );
header( 'Content-Disposition: attachment;filename='.$filename);
$fp = fopen('php://output', 'w');
fputs($fp, $csvdata);
fclose($fp);

voici un exemple de fichier nommé:Test_ Grad Fair 2_20140129_1312_607.csv

quand je tente de télécharger le fichier en utilisant le code ci-dessus avec FireFox, ce qui suit se produit. (le principal problème est qu'il supprime l'extension de fichier!)

Download Image from Firefox

Et quand j'essaie de le télécharger à partir de Safari, ou Chrome:

Downloading it from Safari

   

je sais que la solution serait de peut-être faire quelque chose comme:

$filename = str_replace(' ', '', $filename);

cependant, je préfère comprendre pourquoi FireFox a ce problème, il semble un peu ridicule que vous ne pouvez pas avoir un espace dans un nom de fichier. Cela pourrait-il être comme un %20 au lieu d'un problème d'espace?

11
demandé sur Arian Faurtosh 2014-01-30 01:21:11

2 réponses

le paramètre filename doit être entouré de guillemets.

header( 'Content-Disposition: attachment;filename="'.$filename.'"');

voir http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download

31
répondu Barmar 2014-01-29 21:27:38

j'ai eu un petit problème en téléchargeant un fichier avec le nom de fichier contient de l'espace. J'ai résolu ce problème en utilisant le code suivant. J'avais écrit ce code pour le cadrage CodeIgniter.

    $file_name = 'Test Pdf.pdf'; //Your file name
    $original_file_name = 'Test Pdf.pdf'; //Your file name
    $file_name = str_replace(' ', '%20', $file_name);
    $file_url = asset_url("uploads/agent_logo/46/".$file_name);// Full file path including file name.
    ob_start();
    ob_end_clean();
    header('Content-Type: application/octet-stream');
    header('Content-Transfer-Encoding: Binary');
    header("Content-Disposition: attachment; filename=\"" . $original_file_name . "\"");
    readfile($file_url);

cela fonctionnera pour tous les types de fichiers et tous les navigateurs, y compris mozilla firefox et IE

2
répondu Abin John 2015-11-26 09:33:44