Datei mit Umlauten und Sonderzeichen löschen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datei mit Umlauten und Sonderzeichen löschen

    Hallo zusammen,

    Ich bin gerade an einem kleinen Filemanager Script. Nun ist mir aufgefallen, dass Dateien mit Umlauten oder Sonderzeichen im Namen nicht gelöscht werden können.
    PHP-Code:
    unlink($file); 
    Die Fehlermeldung sagt, dass es die Datei nicht findet.
    Die korrekte Anzeige auf der GUI funktioniert auch erst seit ich den Dateiname per
    PHP-Code:
    htmlentities($fileENT_QUOTES,"ISO-8859-1"
    richtig kodiert habe.
    Beim löschen wird der Dateiname schlussendlich per GET an das PHP Script übertragen.
    Natürlich ist mir klar, dass ich die Datei auch einfach unbennen könnte, dass wäre jedoch nicht das was ich wollte. Das PHP Script läuft im moment auf Windows, sollte später jedoch auch auf einer Linux Kiste seine Dienste tun.

    Ich wäre sehr froh wenn mir jemand helfen könnte

    Gruess tariq22

  • #2
    url_encode()
    url_decode()

    Hab das auch mal programmiert und die beiden haben mir dabei sehr sehr geholfen?
    Liebe Grüße,
    SteKoe!

    PHP Tutorials
    Peter Kropff | Quakenet | Schattenbaum.net

    Kommentar


    • #3
      Wenn du nun schon unter Windows probleme mit den Umlauten hast, dann wirst du die unter Linux erst Recht haben!

      Du solltest Dir angewöhnen KEINE Dateien mit Umlauten, Lerrzeichen usw anzulegen. Beim hochladen von bildern halt alle umlaute und leerzeichen ersetzen). erstelle neue Dateien ohne Umlaute und Leerzeichen.

      Wenn du solche Grundvorraussetzungen schaffst, dann hast Du auch kein Problem mit unlink. Nicht unter Windows und auch unter Linux wirds dann gehen.

      Gerade bei Webservern sollte man auf Umlaute ect verzichten. Das ist grundregel Nr 1 bei der Dateiverwaltung. Leerzeichen werden Dir noch ne Menge Ärger unter Linux machen, wenn der Server "scharf" eingestellt ist.

      Mein Tip: Umlaute usw entfernen dann klappts auch mit´m Nachbarn, aeh, mit unlink

      Kommentar


      • #4
        mach mal ein beispiel, bitte.

        Kommentar


        • #5
          Was für ein Beispiel? Um Umlaute zu ersetzen? Du kannst aber schon php, oder?
          PHP-Code:
          $name "Datei mit Umlauten und Leerzeichen ÖÄÜ & / ( ) öäü.ext";

          function 
          GetWebname($name,$tolower=false){
            
          $search = array("ä","ö","ü"," ","ß","?","Ö","Ä","Ü",";","§","&","/","(",")","=");
            if (
          $tolower==true){
              return 
          strtolower(str_replace($search,"",$name));
            } else {
              return 
          str_replace($search,"",$name);
            }
          }

          echo 
          GetWebname($name)."<br>";
          echo 
          GetWebname($name,true)."<br>"
          Edit: Hier schnell im Editor zusammengeschrieben, müsste aber passen...

          Kommentar


          • #6
            die frage ging an tariq22.

            Kommentar


            • #7
              Danke erstmal für euere schnellen Antworten!

              mach mal ein beispiel, bitte.
              Also nun ist es so, dass es auch beim download einer solchen Datei auftritt.
              Ein Beispiel:
              Ich will die Datei "äöü__ dasa$$$ as.txt" downloaden. Den Link zum Download der Datei wird per Javascript erstellt:
              PHP-Code:
              html += "<tr><td><a href=\"?file=" 
              encodeURI(string[i]["name"]) + "\">" string[i]["name"] + 
              "</a></td><td>" string[i]["size"] + "</td><td>" 
              string[i]["date"] + "</td>"
              Wenn ich nun den Link klicke wird folgende Funktion ausgeführt:
              PHP-Code:
                  function downloadFile($file) {
                      
              $mimetype mime_content_type($file);
                      if(!
              $filesize = @filesize(FILE_ROOT.$this->name."/".urldecode($file))) {
                          throw new 
              Exception("No such File.");
                          return 
              false;    
                      }
                      
              header("Content-type: ".$mimetype);
                      
              header("Content-Disposition: attachment; filename=\"$file\"");
                      
              header("Content-Length: $filesize");
                      
                      
              readfile(FILE_ROOT.$this->name."/".$file);

                  } 
              Da es die Datei nicht findet wird folgende Fehlermeldung ausgegeben:
              Fatal error: Uncaught exception 'Exception' with message 'No such File.'
              in D:\xampp\xampp\htdocs\nariq\class\prog\pProject.class.php:82
              Stack trace: #0 D:\xampp\xampp\htdocs\nariq\pub\index.php(22): pProject->downloadFile('???__ dasa$$$ a...')
              #1 {main} thrown in D:\xampp\xampp\htdocs\nariq\class\prog\pProject.class.php on line 82
              Somit funktioniert der Download nicht.

              url_encode()
              url_decode()
              Hab ich eingebaut, ändert jedoch nichts....
              Zuletzt geändert von tariq22; 19.02.2007, 13:36.

              Kommentar


              • #8
                zeig mal bitte eine testausgabe des Content-Disposition headers.

                und die exceptions werden nicht einfach so durch die gegend geworfen. oder dient es nur dem testen?

                Kommentar


                • #9
                  zeig mal bitte eine testausgabe des Content-Disposition headers.
                  Wie mache ich das ?
                  und die exceptions werden nicht einfach so durch die gegend geworfen. oder dient es nur dem testen?
                  Hab noch kein Exception Handler geschrieben....

                  Kommentar


                  • #10
                    PHP-Code:
                    $header "..."#<- hier der string, den du in header() einbaust.
                    var_dump($header); 

                    Kommentar


                    • #11
                      Aso... Hatte ein bischen eine lange Leitung...
                      PHP-Code:
                      string(20"äöü__ dasa$$$ as.txt" 

                      Kommentar


                      • #12
                        entschuldige, gemeint war eigentlich die testausgabe von dem, was an filesize und an mime_content_type übergeben wird.

                        Kommentar


                        • #13
                          PHP-Code:
                              function downloadFile($file) {
                                  
                          var_dump($file);
                                  
                          $mimetype mime_content_type($file);
                                  if(!
                          $filesize = @filesize(FILE_ROOT.$this->name."/".urldecode($file))) {
                                      
                          //throw new Exception("No such File.");
                                      
                          return false;    
                                  }
                                  
                          header("Content-type: ".$mimetype);
                                  
                          header("Content-Disposition: attachment; filename=\"$file\"");
                                  
                          header("Content-Length: $filesize");
                                  
                                  
                          readfile(FILE_ROOT.$this->name."/".$file);

                              } 
                          Oder hab ich was falsch verstanden ?
                          Zuletzt geändert von tariq22; 19.02.2007, 13:34.

                          Kommentar


                          • #14
                            das ist schon mal gut. zeig was dabei rauskommt.
                            und nachher noch eine ausgabe dessen, was an filesize übergeben wird.

                            Kommentar


                            • #15
                              Gibt alles
                              PHP-Code:
                              string(20"äöü__ dasa$$$ as.txt" 
                              zurück....

                              Kommentar

                              Lädt...
                              X