fileexists() auf Dateiname mit Umlauten
Peter
- php
Hallo Zusammen,
hab ein kleines Problem, ich möchte mittels fileexists() abfragen ob eine Datei existiert. Im Grunde gar kein Problem. Leider enthalten manche Dateinamen Sonderzeichen wie z.B. Umlaute und dann liefert die Funktion nur den Rückgabewert false. Hat da jemand einen Tipp oder Erfahrung mit diesem Problem?
Muss ja irgendwo ein Problem mit dem Zeichensatz auf dem Linuxserver und dem PHP Zeichensatz sein. Oder irre ich mich da?
Danke schonmal.
Peter
Servus,
Hat da jemand einen Tipp oder Erfahrung mit diesem Problem?
Verwende am besten keine Sonderzeichen in Dateinamen.
Gruss
Patrick
Hellihello Peter,
immerhin bei mir gehts. Windows und Linux. Weiss aber nicht, warum. Aber vergiss nicht ggf., dass die Browser mit den Umlauten mucken.
frankx
Hellihello Peter,
immerhin bei mir gehts. Windows und Linux. Weiss aber nicht, warum. Aber vergiss nicht ggf., dass die Browser mit den Umlauten mucken.
frankx
Hallo Frank,
danke für die Antwort muss dann wohl nochmal was auf Forschungsreise gehen. Aber eine Frage hab ich da an Dich, bei mir kommt der Dateiname über GET, ist das bei dir auch der fall?
Peter
Hellihello,
danke für die Antwort muss dann wohl nochmal was auf Forschungsreise gehen. Aber eine Frage hab ich da an Dich, bei mir kommt der Dateiname über GET, ist das bei dir auch der fall?
nein, dann hast du doch das browserproblem:
<?php
echo file_exists("pöp.php"); //gibt 1 bei mir
?>
frankx
echo $begrüßung;
hab ein kleines Problem, ich möchte mittels fileexists() abfragen ob eine Datei existiert. Im Grunde gar kein Problem. Leider enthalten manche Dateinamen Sonderzeichen wie z.B. Umlaute und dann liefert die Funktion nur den Rückgabewert false. Hat da jemand einen Tipp oder Erfahrung mit diesem Problem?
Muss ja irgendwo ein Problem mit dem Zeichensatz auf dem Linuxserver und dem PHP Zeichensatz sein. Oder irre ich mich da?
Die Zeichenkodierung deines Scripts wäre interessant. PHP nimmt da keine Änderung/Anpassung vor, es reicht die Bytes einfach durch. Wenn die Zeichenkodierung des Dateisystems eine andere ist als du für das Script verwendest, kann ich mir durchaus vorstellen, dass das Ursache für das beschriebene Verhalten ist.
Wenn du den Dateinamen probeweise mit utf8_encode() behandelst und es funktioniert, dann wird dein Script ISO 8859-1 sein, das Dateisystem hingegen UTF-8.
Wenn du den Dateinamen probeweise mit utf8_decode() behandelst und es funktioniert, dann wird dein Script UTF-8 sein, das Dateisystem hingegen ISO 8859-1.
Andere Konstellationen wären auch denkbar, aber das sind die beiden gebräuchlichsten.
echo "$verabschiedung $name";
Wenn du den Dateinamen probeweise mit utf8_encode() behandelst und es funktioniert, dann wird dein Script ISO 8859-1 sein, das Dateisystem hingegen UTF-8.
Wenn du den Dateinamen probeweise mit utf8_decode() behandelst und es funktioniert, dann wird dein Script UTF-8 sein, das Dateisystem hingegen ISO 8859-1.
Andere Konstellationen wären auch denkbar, aber das sind die beiden gebräuchlichsten.
war auch mein erster Ansatz, hatte utf8_encode() probiert und hat leider nicht funktioniert. Muss mich wohl damit abfinden das die Lösung nicht so einfach zu finden ist. Aber danke für die Antwort, dadurch weiß ich, das ich auf jedenfall an der richtigen Stelle suche.
Peter
echo $begrüßung;
war auch mein erster Ansatz, hatte utf8_encode() probiert und hat leider nicht funktioniert. Muss mich wohl damit abfinden das die Lösung nicht so einfach zu finden ist. Aber danke für die Antwort, dadurch weiß ich, das ich auf jedenfall an der richtigen Stelle suche.
Noch eine Idee: Lass dir von deinem Script aus den Directory-Inhalt auflisten, dann solltest du sehen, wie der problematische Dateiname aus Script-Sicht ausieht. Notfalls kannst du dir die Bytes mit chunk_split(bin2hex($dateiname), 2, ' ') einzeln anzeigen lassen.
echo "$verabschiedung $name";