Sonderzeichen im Dateinamen

chriss_2oo4

Erfahrenes Mitglied
Hi,

ich verlinke in einem PHP Script einige Dateien. Der Pfad der Datei ist in einer Variablen gespeichert.

Die Dateien befinden in unterschiedlichen Verzeichnissen, die im Root Verzeichnis des Servers liegen.

Beispiel:

Code:
/dir1/file1.txt
/dir1/file2.txt
/dir2//file1.txt
...

Beispiel: Link in PHP erezugen:

PHP:
$file1 =  '/dir1/file1.txt';
echo '<a href="/' . $file1 . '">file1</a>';

Funktioniert soweit wunderbar. Kommen aber folgende Dateipfade hinzu, funktioniert es leider nicht mehr.

Code:
/dir1/#/#.txt
/dir1/%/%.txt

Bei der ersten Datei sagt mir der Server, dass ich keinen Zugriff hätte (... no permission ...) und bei der zweiten Datei ist der Link verschwunden, d. h. es wird ins Leere verlinkt.

Wie kann man soetwas lösen?


Beste Grüße
Chriss
 
Moin Chriss,

codiere die störenden Zeichen wie es bei einer URL vorgesehen ist:

# nach %23
% nach %25

dabei hilfreich ist [phpf]urlencode[/phpf]

Das darfst du aber nicht auf den ganzen Pfad, sondern nur auf Datei/Verzeichnisname anwenden...sonst würden Punkt und Slash auch codiert :-)
 
Sven Mintel,

vielen Dank für Deine Antwort!

Das ist mir auch schon in den Sinn gekommen, leider kann ich urlencode() bzw. rawurlencode() nicht anweden.

Und zwar hat das den Grund, dass ich den gesamten Pfad als string geliefert bekomme. Und urlencode() kann ich ja, wie du schon gesagt hast, nicht auf den gesamten Pfad anwenden.



Beste Grüße
Chriss
 
Sven Mintel,

vielen Dank für Deine Antwort!

Das ist mir auch schon in den Sinn gekommen, leider kann ich urlencode() bzw. rawurlencode() nicht anweden.

Und zwar hat das den Grund, dass ich den gesamten Pfad als string geliefert bekomme. Und urlencode() kann ich ja, wie du schon gesagt hast, nicht auf den gesamten Pfad anwenden.



Beste Grüße
Chriss

Dann musst du mittels str_replace() nach den Zeichen suchen und diese durch die kodierte Variante ersetzten!
 
Hi zer0,

auch vielen Dank für deine Antwort!

Das müsste ich dann wohl, aber dafür muss es doch eine PHP Funktion geben. Dieses Problem tritt ja bestimmt häufiger auf.

Außerdem sind in Widows leider bestimmt noch mehr Sonderzeichen zugelassen.

Beste Grüße
Chriss
 
Das müsste ich dann wohl, aber dafür muss es doch eine PHP Funktion geben. Dieses Problem tritt ja bestimmt häufiger auf.

Und zwar hat das den Grund, dass ich den gesamten Pfad als string geliefert bekomme. Und urlencode() kann ich ja, wie du schon gesagt hast, nicht auf den gesamten Pfad anwenden.
Da muss der Pfad dann eben schon codiert sein. Überhaupt sind Sonderzeichen im Dateinamen keine gute Idee. Davon solltest du dich verabschieden.
 
Das müsste ich dann wohl, aber dafür muss es doch eine PHP Funktion geben. Dieses Problem tritt ja bestimmt häufiger auf.

Außerdem sind in Widows leider bestimmt noch mehr Sonderzeichen zugelassen.

Du könntest die selbst eine Funktion bauen. Lasse den Pfad zuerst duch urlencode() kodieren, danach ersetzt im kodierten Pfad wieder die Zeichen für Slashes( / ) mit dem Slash. So werden alle Zeichen ausser Slash kodiert!
 
Hey!

@zer0, wenns keine Fertige funktion seitens PHP gibt, werd ichs wohl so machen müssen. Auch wenn soetwas immer fehleranfällig ist (da vergisst man schnell mal was -> z. B. Punkt). Aber trozdem Danke!


Da muss der Pfad dann eben schon codiert sein. Überhaupt sind Sonderzeichen im Dateinamen keine gute Idee. Davon solltest du dich verabschieden.

... vielen dank für die äußerst hilfreiche Antwort, aber die Dateinamen hab ich mir nicht selbst ausgedacht.


Beste Grüße!
 
Zurück