PHP Downloadzwang-Script sägt Dateinamen nach Leerzeichen ab!
Hallo,
mein (naja. Es ist nicht direkt "mein") script hat probleme mit leerzeichen in dateinamen.
Das Problem:
Wenn ein Leerzeichen (space) im Dateiname ist, wird der Dateiname nur bis zum ersten Leerzeichen angezeigt. (Dateiendung geht auch flöten...)
Außerdem, tritt das Problem nur im Mozilla auf...
Opera, zeigt den Dateinamen erst ab klammer auf an, bzw. den ganzen Dateinamen, wenn keine klammern vorkommen.
Internet Explorer verhackstückelt die umlaute (äöü).
Die Lösung (dachte ich):
Hat leider nicht geklappt...
Tschau
B-Free
mein (naja. Es ist nicht direkt "mein") script hat probleme mit leerzeichen in dateinamen.
<?php
session_start();
if ($_SESSION['login'] == true && $_SESSION['user'] != "") {
$pfaduser = $_GET['pu'];
$downloaduser = $_GET['du'];
$datei = $_GET['da'];
if ($pfaduser == "" || $downloaduser == "" || $datei == "") {
## Eine (oder mehrere) der übermittelten Parameter sind leer!
header ('Location: http://www.example.domain/index.php?f=para&logout=true');
echo "<script>window.close();</script>";
exit;
}
else {
## Alle Parameter sind gesetzt
if (file_exists("daten/".$pfaduser."/".$datei."")) {
## Die datei die heruntergeladen werden soll existiert
if (file_exists("daten/".$pfaduser."/".$datei.".#sav")) {
## Die datei die heruntergeladen werden soll ist freigegeben
$datei = "daten/".$pfaduser."/".$datei;
$dateiname = basename($datei);
$groesse = filesize($datei);
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".$dateiname);
header("Content-Length:".$groesse);
readfile($datei);
}
else {
## Die datei die heruntergeladen werden soll ist nicht freigegeben
echo "<div id='bs'><div id='error'><h1>Fehler!</h1>Die ausgewählte Datei steht nicht zum Download freigegeben!<br></div></div>";
}
}
else {
## Die datei die heruntergeladen werden soll existiert nicht
echo "<div id='bs'><div id='error'><h1>Fehler!</h1>Die Datei existiert nicht mehr!.<br></div></div>";
}
}
}
else {
header ('Location: http://www.example.domain/index.php?f=login&logout=true');
echo "<script>window.close();</script>";
exit;
}
echo "<script>window.close();</script>";
?>
Das Problem:
Wenn ein Leerzeichen (space) im Dateiname ist, wird der Dateiname nur bis zum ersten Leerzeichen angezeigt. (Dateiendung geht auch flöten...)
Außerdem, tritt das Problem nur im Mozilla auf...
Opera, zeigt den Dateinamen erst ab klammer auf an, bzw. den ganzen Dateinamen, wenn keine klammern vorkommen.
Internet Explorer verhackstückelt die umlaute (äöü).
Die Lösung (dachte ich):
urlencode
Hat leider nicht geklappt...
Tschau
B-Free
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 217753
Url: https://administrator.de/contentid/217753
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo,
wie wäre es damit, wenn du die Umlaute durch AE OE und UE ersetzt... ist für die Kodierung auch schöner, da nicht unbedingt jedes System mit ISO oder UTF-8 arbeitet...
Ändere deine Zeile 25 folgendermaßen ab, um das mit den Leerzeichen zu lösen:
Ich denke, dann funktioniert's.
Gruß,
Florian.
wie wäre es damit, wenn du die Umlaute durch AE OE und UE ersetzt... ist für die Kodierung auch schöner, da nicht unbedingt jedes System mit ISO oder UTF-8 arbeitet...
Ändere deine Zeile 25 folgendermaßen ab, um das mit den Leerzeichen zu lösen:
header("Content-Disposition: attachment; filename='".$dateiname.'"");
Ich denke, dann funktioniert's.
Gruß,
Florian.
Hallo B-Free,
Les mal die folgenden Threads zur Kompatibilität von Zeichen in diesem Header-Field:
Apropos header:
ich würde anstatt "Force-Download" das hier verwenden, da es Browsertechnisch weniger Fehler verursacht:
Grüße Uwe
Les mal die folgenden Threads zur Kompatibilität von Zeichen in diesem Header-Field:
- http://stackoverflow.com/questions/93551/how-to-encode-the-filename-par ...
- http://greenbytes.de/tech/tc2231/
Apropos header:
ich würde anstatt "Force-Download" das hier verwenden, da es Browsertechnisch weniger Fehler verursacht:
header('Content-Type: application/octet-stream');
Grüße Uwe