eregi() nur bestimme zeichen ?

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

  • eregi() nur bestimme zeichen ?

    hallo,
    folgende situation:

    ein user gibt einen namen ein. ein script erstellt daraus ein verzeichnis mit diesem namen auf einem webserver.

    nun benutze ich eine funktion, um gewissen zeichen umzuwandeln, so dass der ordner namen korrekt ist:

    PHP-Code:
    //URL-gerechte Umformung 
    function verzeichnisumformen($verzeichnis)
        {
             
    $array_1 = array("ä","Ä","ü","Ü","ö","Ö","ß"," ","&");
             
    $array_2 = array("ae","Ae","ue","Ue","oe","Oe","ss","_","und");
             for(
    $x=0;$x<9;$x++)
                 {   
                     
    $verzeichnis str_replace($array_1[$x],$array_2[$x],$verzeichnis); 
                 }
                 return (
    $verzeichnis);
        } 
    und nun wollte ich noch mit eregi eine bedinung aufstellen,
    die alarm schlägt, wenn irgendwas außer a-z oder 0-9 oder eines der zeichen die die funktion umwandelt eingegeben wird.

    nur krieg ich das net hin


    PHP-Code:
    $muster = ?
    if(
    eregi($muster$name)) 
    sowas in der art

  • #2
    mit preg_match
    PHP-Code:
    if(preg_match('/[A-Za-z0-9]/si'$name));
        echo 
    'alles i.O.'
    die Funktion würde ich übrigens so aufbauen:

    PHP-Code:
    function verzeichnisumformen($verzeichnis)
    {
        
    $array = array(
                
    "ä"=>"ae",
                
    "Ä"=>"Ae",
                
    "ü"=>"ue",
                
    "Ü"=>"Ue",
                
    "ö"=>"oe",
                
    "Ö"=>"Oe",
                
    "ß"=>"ss",
                
    " "=>"_",
                
    "&"=>"und"
                
    );
        foreach(
    $array as $key => $value)
            
    $verzeichnis str_replace($array[$key],$array[$value],$verzeichnis); 
        return (
    $verzeichnis);

    require_once('gehirn_v_02beta.php');

    Kommentar


    • #3
      hi,
      erstmal danke, aber leider funktioniert das nicht so wie es soll.
      wenn ich für $name ein sonderzeichen wie * einsetze, wird die if-bedinung trotzdem noch ausgeführt !

      Kommentar


      • #4
        hi,
        wenn ich folgendes mache
        PHP-Code:
            $name="*";

            if(
        preg_match('/[A-Za-z0-9]/si'$name))
                echo 
        'alles i.O.';
            else
                echo 
        'FEHLER!?!'
        wird als Ergebnis : FEHLER!?! ausgegeben

        aber um das Problem zu umgehen, würde ich bei der User-Eingabe schon überprüfen ob ein zulässiges Zeichen eingegeben wurde

        PHP-Code:
            if(preg_match('/[A-Za-z0-9]/si'$name))
            {
                
        //weiter mit Verarbeitung
            
        }
            else
            {
                
        $sMessage 'ungültiges Zeichen eingegeben ...';
                
        //nochmal das Eingabefeld mit der Fehlermeldung
            

        require_once('gehirn_v_02beta.php');

        Kommentar


        • #5
          mh ich habe nun eine etwas elegantere lösung in einem anderen forum gefunden:

          PHP-Code:
          //Verzeichnisüberprüfung & Erstellung
          function create_dir($pfad)
          {
              if (@
          mkdir($pfad0777))
                 {
                   
          $wert="1";
                  
          chmod($pfad0777);
                 }

              else
              {
                  
          $wert="0";
              }
              return(
          $wert);


          aber nun folgendes problem: bei der if-überprüfung wir das mkdir() ausgeführt. kann man das irgendwie unterbinden ? also das nur geschaut wird, ob es möglich ist einen ordner zu erstellen, aber dies nicht gleich auchnoch zu tun ?

          Kommentar


          • #6
            Original geschrieben von toshi


            die Funktion würde ich übrigens so aufbauen:

            PHP-Code:
            function verzeichnisumformen($verzeichnis)
            {
                
            $array = array(
                        
            "ä"=>"ae",
                        
            "Ä"=>"Ae",
                        
            "ü"=>"ue",
                        
            "Ü"=>"Ue",
                        
            "ö"=>"oe",
                        
            "Ö"=>"Oe",
                        
            "ß"=>"ss",
                        
            " "=>"_",
                        
            "&"=>"und"
                        
            );
                foreach(
            $array as $key => $value)
                    
            $verzeichnis str_replace($array[$key],$array[$value],$verzeichnis); 
                return (
            $verzeichnis);

            Warum so umständlich ?

            PHP-Code:

            function verzeichnisumformen($verzeichnis)
            {
                     
            $array_1 = array("ä","Ä","ü","Ü","ö","Ö","ß"," ","&");
                     
            $array_2 = array("ae","Ae","ue","Ue","oe","Oe","ss","_","und");
                     
            $verzeichnis str_replace($array_1,$array_2,$verzeichnis); 
                     return (
            $verzeichnis);

            Syntax:

            mixed str_replace ( mixed search, mixed replace, mixed subject)
            [font=verdana] '][' .... düdeldüdel dü

            Gruss Socket
            -----
            Nein, ich programmiere kein Clan-Script für Dich, nein, auch nicht wenn Deine Schwester gut aussieht!
            [color=darkblue]
            Socket Funktionen[/color]
            [/font]

            Kommentar


            • #7
              doh... die funktion funktioniert doch eh.. egal ob sie etz noch eleganter wird oder nicht. nur die sache mit der if bedingung macht probleme
              Zuletzt geändert von borsti; 07.03.2004, 23:49.

              Kommentar


              • #8
                Hallo

                PHP-Code:
                if(preg_match('/[A-Za-z0-9]/si'$name)) 
                Obiges kann hier nicht funktionieren. Diese Regel matcht jede beliebig lange Zeichenkette, einschließlich von Zeilenumbrüchen, die einen BUchstaben oder eine Ziffer enthält.

                Du möchtest wahrscheinlich eher etwas à la:

                PHP-Code:
                if (!preg_match('~^[a-zA-Z0-9]+$~'$name)) {
                    exit(
                '$name enthält unerlaubte Zeichen');

                Kommentar


                • #9
                  mh jo so funktioniert das wohl auch, aber ich habe mich jetzt für die andere methode entschieden, ala :

                  PHP-Code:
                  //Verzeichnisüberprüfung & Erstellung
                  function create_dir($pfad)
                  {
                      if (@
                  mkdir($pfad0777))
                         {
                           
                  $wert="1";
                                 }

                      else
                      {
                          
                  $wert="0";
                      }
                      return(
                  $wert);


                  nur würde ich es gerne vermeiden, dass die if-bedingung, also das erstellen der datei verhindert wird. also nur geschaut wird, ob das erstellen möglich ist. jedoch wird wenn dem so ist auch gleich eines erstellt. das muss man doch verhindern können ?

                  Kommentar


                  • #10
                    Original geschrieben von borsti
                    mh jo so funktioniert das wohl auch, aber ich habe mich jetzt für die andere methode entschieden, ala :

                    PHP-Code:
                    //Verzeichnisüberprüfung & Erstellung
                    function create_dir($pfad)
                    {
                        if (@
                    mkdir($pfad0777))
                           {
                             
                    $wert="1";
                                   }

                        else
                        {
                            
                    $wert="0";
                        }
                        return(
                    $wert);


                    nur würde ich es gerne vermeiden, dass die if-bedingung, also das erstellen der datei verhindert wird. also nur geschaut wird, ob das erstellen möglich ist. jedoch wird wenn dem so ist auch gleich eines erstellt. das muss man doch verhindern können ?
                    Deine Funktion ist etwas sehr umständlich.
                    Man könnte das einfach so schreiben.
                    function createDir($pfad)
                    {
                    return @mkdir($pfad, 0777);
                    }
                    Käme dasselbe bei raus. bzw. true oder false anstelle 0 oder 1.

                    Die Frage ist nur: Was willst Du jetzt überhaupt?
                    mkdir erstellt ein Verzeichnis, das sollte doch klar sein, oder?

                    Jetzt willst Du schauen, ob ein Verzeichnis erstellt werden kann und dieses danach erstellen, oder wie?
                    Verstehe ich ehrlich gesagt nicht. Wenn das Verzeichnis nicht erstellt werden kann, brichst Du einfach ab, wirfst die Fehlermeldung und fertig.

                    Kommentar


                    • #11
                      also das sieht dann in der menüstruktur etwa so aus :

                      erstellen -- ändern -- löschen von ordnern

                      wenn ich auf erstellen klickte, wird ein ordner erstellt. dafür kann man die von dir beschrieben funktion nutzen.

                      wenn ich aber auf ändern klicke, soll zunächst überprüft werden, ob der neu gewählte name als ordnername verwendet werden kann.
                      (dafür war die funktion gedacht
                      wenn das der fall ist wollte ich mit rename den namen des ordners ändern.

                      wenn ich aber diese funktion etz zum ändern nutzen würde, würde ja gleich ein neuer ordner erstellt werden und net der bestehende umbenannt werden

                      blickt da noch wer durch ?

                      Kommentar


                      • #12
                        Original geschrieben von borsti

                        [...]
                        blickt da noch wer durch ?

                        Sicher
                        Aber, Du machst es Dir wirklich zu umständlich.
                        Du schreibst Du willst rename benutzen, warum tust Du es dann nicht?

                        if (!@rename($old, $new)) {
                        exit('Ordner konnte nicht umbenannt werden');
                        }

                        Aber was steht einer Überprüfung mit dem regulären Ausdruck entgegen?

                        Kommentar


                        • #13
                          mh jo bin noch mehr oder weniger ein newbie

                          aber mit dieser mkdir() anweisung klappts bei mir leider auch nicht.
                          weil die erlaubt im namen zeichen wie !"§$%, die bewirken aber, dass die ordner in der url net funktionieren.

                          denke die idee mit dem regulären ausdruck is doch die beste.
                          aber da blicke ich leider noch net ganz durch.

                          wie genau sollte der etz aussehen, dass nur a-zA-Z0-9 und der _ verwendet werden dürfen ?

                          PHP-Code:
                          if (!preg_match('~^[a-zA-Z0-9]+$~'$name)) {
                              exit(
                          '$name enthält unerlaubte Zeichen');

                          hiermit funktioniert das irgendwie immer noch net
                          das sagt bei so ziemlich allem, dass es unerlaubte zeichen enthält

                          ein beispiel für ne url wäre "galerie/images/test1"

                          Zuletzt geändert von borsti; 08.03.2004, 23:20.

                          Kommentar


                          • #14
                            PHP-Code:
                            if (!preg_match("/^([a-z0-9_]*)$/si"$name)) 
                            {
                                die(
                            $name.' enthält unerlaubte Zeichen');
                            }

                            // oder

                            if (!preg_match("/^([a-z0-9_]+)$/si"$name)) 
                            {
                                die(
                            $name.' enthält unerlaubte Zeichen');
                            }

                            //bin nicht ganz sicher aber so sollte das doch funzen ?!? 
                            [font=verdana] '][' .... düdeldüdel dü

                            Gruss Socket
                            -----
                            Nein, ich programmiere kein Clan-Script für Dich, nein, auch nicht wenn Deine Schwester gut aussieht!
                            [color=darkblue]
                            Socket Funktionen[/color]
                            [/font]

                            Kommentar


                            • #15
                              Original geschrieben von borsti
                              mh jo bin noch mehr oder weniger ein newbie

                              aber mit dieser mkdir() anweisung klappts bei mir leider auch nicht.
                              weil die erlaubt im namen zeichen wie !"§$%, die bewirken aber, dass die ordner in der url net funktionieren.

                              denke die idee mit dem regulären ausdruck is doch die beste.
                              aber da blicke ich leider noch net ganz durch.

                              wie genau sollte der etz aussehen, dass nur a-zA-Z0-9 und der _ verwendet werden dürfen ?

                              PHP-Code:
                              if (!preg_match('~^[a-zA-Z0-9]+$~'$name)) {
                                  exit(
                              '$name enthält unerlaubte Zeichen');

                              hiermit funktioniert das irgendwie immer noch net
                              das sagt bei so ziemlich allem, dass es unerlaubte zeichen enthält

                              ein beispiel für ne url wäre "galerie/images/test1"
                              Ist ja auch kein Wunder.
                              "galerie/images/test1" enthält ja auch Slashes, welche im regulären Ausdruck nicht angegeben/erlaubt sind.
                              Aber der Name des Ordners hat ja nichts mit dem Pfad zu tun.
                              Deswegen spielt der Pfad keine Rolle, sondern nur der Name des Ordners, nämlich in diesem Fall "test1" und nur dieser String sollte mit dem regulären Ausdruck getestet werden, nicht der gesamte Pfad.

                              Kommentar

                              Lädt...
                              X