php - file_get_contents - Herunterladen von Dateien mit Leerzeichen im Dateinamen funktioniert nicht

7

Ich versuche, Dateien mit der Funktion file_get_contents() herunterzuladen. Wenn der Speicherort der Datei jedoch http://www.example.com/some name.jpg ist, kann die Funktion diese Datei nicht herunterladen.

Aber wenn die URL als http://www.example.com/some%20name.jpg angegeben wird, wird dieselbe heruntergeladen.

Ich habe rawurlencode() ausprobiert, aber dadurch werden alle Zeichen in der URL verdeckt und der Download schlägt erneut fehl.

Kann jemand bitte eine Lösung dafür vorschlagen?

    
user1064386 24.11.2011, 17:11
quelle

5 Antworten

23

Ich denke, das wird für Sie funktionieren:

%Vor%

Ausgabe

%Vor%

Hinweis:

Ich würde wahrscheinlich urldecode und urlencode dafür verwenden, da die Ausgabe für jede URL identisch wäre. rawurlencode behält die + auch dann bei, wenn %20 wahrscheinlich für die von Ihnen verwendete URL geeignet ist.

    
maček 24.11.2011 17:48
quelle
1

Wie Sie wahrscheinlich schon herausgefunden haben, sollte urlencode () nur für jeden Teil einer URL verwendet werden, die es zu umgehen gilt.

Von der Dokumentation für urlencode () übertragen Sie sie einfach auf den Bilddateinamen, der das Problem verursacht und lassen Sie den Rest der URL allein. In Ihrem Beispiel können Sie alles nach dem letzten Zeichen "/"

sicher verschlüsseln     
Brad 24.11.2011 17:30
quelle
0

Hier ist vielleicht eine bessere Lösung. Wenn Sie aus irgendeinem Grund eine relative URL wie:

verwenden

// www.beispiel.de/pfad

Vor PHP 5.4.7 würde dies nicht das Array-Element [scheme] erzeugen, das die maček-Funktion auslöschen würde. Diese Methode kann auch schneller sein.

$url = '//www.example.com/path';

%Vor%     
user3622199 08.06.2014 00:59
quelle
0

Wenn nur der Dateiname das Problem hat, ist dies ein besserer Ansatz. nur urlencode den letzten Abschnitt dh. Dateiname.

%Vor%     
Brandon 22.02.2016 08:33
quelle
-1

Dies sollte funktionieren

%Vor%     
Kirill 24.11.2011 17:32
quelle