Dateien runterladen per PHP

Do_0mi

Mitglied
Hi,

ich habe ein Problem.
Und zwar will ich Dateien, die ich per PHP hochgeladen habe, nun auch wieder downloaden können.
Bisher ging das auch recht gut:
PHP:
  //......
$filedata = stat("$dir/$p");
$filesize = $filedata[7];
  // sql hier....
header("Content-Length: $filesize");
header("Content-Disposition: attachment; filename=$p");
readfile("$dir/$p");
exit;

Nun habe ich aber Probleme wenn die Datei z. B. "Dies ist meine Präsentation.doc" heißt. Solange nur Lücken vorkommen, geht es noch. Jedoch geht es nicht mehr, wenn ein "ü", "ö" oder "ä" vorkommt.

Hat jemand eine Lösung für mein Problem
vielen Danke schonmal im Vorraus ;)

Gruß, Do_0mi
 
Versuchs mal so:

$link = str_replace("ö", "ö", $link);
$link = str_replace("ä", "ä", $link);
$link = str_replace("ü", "ü", $link);
 
Du könntest schon beim hochladen darauf achten, dass dort keine Umlaute oder ähnliches mehr vorkommen.

Und dreimal str_replace aufrufen ist auch unnötig, da str_replace auch mit Arrays arbeitet.
 
Probier’s mal mit folgender Funktion:
PHP:
function rfc822_quoteString($string) {
	return '"'.preg_replace('/[^\x00-\x0C\x0E-\x21\x23-\x5B\x5D-\x7F]/', '\\\$0', $string).'"';
}
PHP:
header("Content-Disposition: attachment; filename=".rfc822_quoteString($p));
 
Hi,

danke euch allen schonmal für eure Vorschläge.
Ich habe nun mal den Vorschlag von Gumbo genommen.
Funktioniert im IE6 auch super :)
... jedoch bietet mir Firefox 3 zum Downloaden eine Datei ohne Dateiändung an.
Dieses Problem hatte ich (glaube ich) auch schon vorher. Was muss anders gemacht werden?

Gruß, Domi
 
Die Funktion erfüllt eigentlich aus meiner Sicht die Eigenschaften der Spezifikation, wie ein Quoted-String-Wert zu kodieren ist.
 
Zurück