Hallo
auf einer Formularseite hat ein Benutzer die Möglichkeit JPG-Dateien hochzuladen. Diese speichere auf dem Linux-Server …. Die hochgeladenen Dateien können über einen Downloadlink wieder heruntergeladen werden.
Leider funktioniert es nicht, wenn die Datei deutsche Umlaute enthält.
Die vordergründige Antwort, den Strings/die Zeichenketten mit der Pfadangabe zu behandeln, hast du ja selbst gefunden. Allerdings ist zu beachten, wo der Dateiname innerhalb der URL angegeben wird. Ist der Dateiname Teil des Pfades der URL selbst (also zum Beispiel https://www.example.org/download/beispiel.jpg
), ist dafür die Funktion rawurlencode
zu benutzen und nicht urlencode
.
Die von dir gefundene Funktion urlencode
benutzt man, wenn der String (bei dir der Dateiname) Teil eines URL-Parameters ist (also zum Beispiel https://www.example.org/download.html?download=beispiel.jpg
). Hier ist download
der Parameterschlüsselname und beispiel.jpg
der mit urlencode
zu behandelnde Wert.
Siehe dazu auch die Handbuchseinten zu rawurlencode und urlencode.
Wie Robert schon schrieb, ist aber auch wichtig, alle Speicher-, Verarbeitungs- und Ausgabeschritte mit der selben Kodierung auszuführen und wie Gunnar schrieb, sollte das die Kodierung UTF-8 sein und nix anderes.
Das betrifft also die Seite mit dem Formular zum Upload, das Skript, dass den Upload verarbeitet, prüft, speichert und den zugehörigen Datenbankeintrag erzeugt, die Datenbank selbst und die Verbindungen zum schreiben in und lesen aus der Datenbank, das Skript, dass aus der Datenbank liest und die Ausgabe der Seite, auf der sich der Downloadlink befindet, erzeugt und schlussendlich wieder der Webserver, der diese Seite an die Browser ausliefert.
Ähhh … und es betrifft auch das Programm, mit dem du die Skripte schreibst (Texteditor oder IDE). Das sieht nach viel Hassle aus, aber im Grunde musst du das einmal abklären, enrichten und/oder einstellen.
Und kurz vor dem Ende dieser Kette, bei der Erstellung der HTML-Ausgabe, müssen alle von außerhalb des Skripts kommenden Zeichenketten, die Teil der Ausgabe werden sollen, gemäß ihren Kontextes maskiert werden. Text, der sichtbar auf der HTML-Seite ausgegeben werden soll, muss mit htmlspecialchars
behandelt werden, URL …
[edit]
vorhin vergessen, den Satz zu beenden:
… -Bestandteile, je nach Anwendungsfall, mit rawurlencode
oder urlencode
.
[/edit]
Tschö, Auge
„Habe ich mir das nur eingebildet, oder kann der kleine Hund wirklich sprechen?“ fragte Schnapper. „Er behauptet, nicht dazu imstande zu sein“ erwiderte Victor. Schnapper zögerte (…) „Nun …“ sagte er schließlich, „ich schätze, er muss es am besten wissen.“ Terry Prattchett, Voll im Bilde