Ankündigung

Einklappen
Keine Ankündigung bisher.

Was darf nicht in einem Dateinamen stehen und wie gehts weg?

Einklappen

Neue Werbung 2019

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

  • Was darf nicht in einem Dateinamen stehen und wie gehts weg?

    Hallo!

    Also ich will auf meinem Server eine Datei speichern. Der Titel der Datei wird per GET-Variable übergeben. Jetzt muss ich diese Variable ja aber noch vor dem Speichern der Datei mit dem Namen bearbeiten. Auf was muss ich da alles achten? Umlaute, Leerzeichen....?

    Und meine 2. Frage wäre, welche Funktion ich da brauche um diese Fehlerherde zu finden und sie so zu ändern, dass es kein Problem gibt.


  • #2
    Umlaute, Leer- und Sonderzeichen.

    Gruß
    phpfan

    Kommentar


    • #3
      PHP-Code:
      <?php
      ereg_replace
      ('ä''ae'$input); 
      ereg_replace('ö''ae'$input); 
      ereg_replace('ü''ae'$input); 
      ereg_replace(' ''_'$input); 
      ...
      ?>

      Kommentar


      • #4
        urlencode()

        eagleScripts.de

        Kommentar


        • #5
          Zitat von HK
          PHP-Code:
          <?php
          ereg_replace
          ('ä''ae'$input); 
          ereg_replace('ö''ae'$input); 
          ereg_replace('ü''ae'$input); 
          ereg_replace(' ''_'$input); 
          ...
          ?>
          Statt ereg_* sollte man preg_* verwenden, da PCRE schneller als POSIX Regex ist, wobei an dieser Stelle str_replace() reicht und aus Performance-Gründen vorzuziehen ist.

          Kommentar


          • #6
            stimmt, da hab ich in der Schnelle gar nicht dran gedacht. Ich nehm auch immer str_replace() da es für meine Bedürfnisse meistens ausreicht bzw auch, wie du schon gesagt hast, von der Performance am Geeignetesten ist.

            Kommentar


            • #7
              Zitat von HK
              stimmt, da hab ich in der Schnelle gar nicht dran gedacht. Ich nehm auch immer str_replace() da es für meine Bedürfnisse meistens ausreicht bzw auch, wie du schon gesagt hast, von der Performance am Geeignetesten ist.
              OK, also ich habs jetzt so:

              PHP-Code:
              $dateiname "".$_POST['titel']."";
              str_replace('ä''ae'$dateiname);
              str_replace('ö''oe'$dateiname);
              str_replace('ü''ue'$dateiname);
              str_replace('ß''ss'$dateiname);
              str_replace(' ''_'$dateiname); 
              Nur leider macht der das nicht wirklich.

              Kommentar


              • #8
                str_replace liefert eine Zeichenektte zurück. Diese musst Du benutzen.

                Was für seltsame (alte?) Betriebsysteme/grafische Oberfläschen verwendet Ihr denn alle, dass deutsche Umlaute Schwierigkeiten machen?

                Was ist mit / bzw \ ?
                Was mit Fragezeichen, weiteren whitespace usw.?
                Dagegen sind die Umlaute doch ein Witz.

                Wenn es sicher sein soll, würde ich eher eine Liste erlaubter Zeichen benutzen und preg_replace alle nicht in dieser Liste enthaltenen Zeichen ersetzen lassen.

                Kommentar


                • #9
                  also erstmal:
                  warum machst du "" vor und nach der $_POST['title']. Des bringt doch garnix ...

                  zweitens:
                  Schneller geht es du machst das mit einem Befehl:

                  PHP-Code:
                  $dateiname addslashes($_POST['title']);
                  str_replace(array('ä''ö''ü''ß'' '), array('ae''oe''ue''ss''_'), $dateiname); 
                  Das müsste eigentlich funktionieren ..


                  MFG Connar

                  Kommentar


                  • #10
                    Zitat von Connar
                    also erstmal:
                    warum machst du "" vor und nach der $_POST['title']. Des bringt doch garnix ...

                    zweitens:
                    Schneller geht es du machst das mit einem Befehl:

                    PHP-Code:
                    $dateiname addslashes($_POST['title']);
                    str_replace(array('ä''ö''ü''ß'' '), array('ae''oe''ue''ss''_'), $dateiname); 
                    Das müsste eigentlich funktionieren ..


                    MFG Connar
                    So, also ich habs jetzt so probiert, wie du es sagst.

                    Leider hat er bereits damit Probleme:

                    $dateiname = addslashes($_POST['title']);

                    Die Variable $dateiname ist in diesem Fall dann schon leer.

                    Kommentar


                    • #11
                      Steht in $_POST['title'] denn überhaupt etwas? Welche Ausgabe erhälst du mit var_dump($_POST)? Ist display_errors aktiviert? Steht error_reporting auf E_ALL?

                      Kommentar


                      • #12
                        Zitat von xabbuh
                        Steht in $_POST['title'] denn überhaupt etwas? Welche Ausgabe erhälst du mit var_dump($_POST)? Ist display_errors aktiviert? Steht error_reporting auf E_ALL?
                        OK, also die Variable hat einen Wert und der wird jetzt auch ausgegeben. Also am Anfang ist $_POST['titel'] = "hallölälu du". Leider kommt das am Ende genau so raus, also die ö,ä, , etc. werden nicht geändert.

                        Kommentar


                        • #13
                          Dann ist $_POST['title'] eben auch schon leer...

                          Edit: Ups, hab diese Seite überlesen.

                          Kommentar


                          • #14
                            Also am Anfang ist $_POST['titel'] = "hallölälu du". Leider kommt das am Ende genau so raus, also die ö,ä, , etc. werden nicht geändert.
                            addslashes() kümmert sich nicht um äöü. Kann man auch im Handbuch nachlesen: http://de2.php.net/addslashes

                            Kommentar


                            • #15
                              Zitat von Bruchpilot
                              Also am Anfang ist $_POST['titel'] = "hallölälu du". Leider kommt das am Ende genau so raus, also die ö,ä, , etc. werden nicht geändert.
                              addslashes() kümmert sich nicht um äöü. Kann man auch im Handbuch nachlesen: http://de2.php.net/addslashes
                              Ja, das macht doch theretisch die 2. Zeile, aber der Code wurde mir ja hier im Forum so ans Herz gelegt. Wie muss er anders lauten?

                              Kommentar

                              Lädt...
                              X