Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit eregi_replace

Einklappen

Neue Werbung 2019

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

  • Probleme mit eregi_replace

    Hier mal mein Code:
    PHP-Code:
    $url3 eregi_replace("https""http"$url);
    $url3 eregi_replace("http://www."""$url3);
    $url3 eregi_replace("http://"""$url3);
    $url3 "$url3";
    $url4 "/";
    $url3 explode$url4$url3 );
    $url3 $url3[0]; 
    Weis einer wie man das in preg_replace umstellt ?

    meine Erfolge:
    PHP-Code:
    $url3 preg_replace("/https/""http"$url); 
    der Rest geht garnicht.

    lg jens

  • #2
    http://php.net/manual/de/function.parse-url.php

    Btw:
    PHP-Code:
    $url3 "$url3"
    Was soll das bringen?
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      würde dir spontan auch zu parse_url( ... ) raten.
      Ist bedeutend sauberer als alle regex(e) der Welt und obendrein einfacher
      "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

      Kommentar


      • #4
        Mal abgesehen davon, dass meine Vorredner natürlich mit parse_url() recht haben, sei noch erwähnt, dass ereg_* Funktionen deprecated sind, dafür gibt es seit Jahren die preg_* Funktionen.
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          Zitat von Arne Drews Beitrag anzeigen
          Mal abgesehen davon, dass meine Vorredner natürlich mit parse_url() recht haben, sei noch erwähnt, dass ereg_* Funktionen deprecated sind, dafür gibt es seit Jahren die preg_* Funktionen.
          Genau darum geht es dem TE doch. Er kommt nur nicht mit den "preg-pendants" klar.
          [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

          Kommentar


          • #6
            jens34 :
            Tipp für die Umstellung von ereg_* auf preg_* : Nimm einen Begrenzer für den RegEx, der im Suchtext nicht vorkommt.
            PHP-Code:
            $url3 preg_replace("~https~""http"$url); 
            Für einen Fall wie hier #1 reicht auch str_replace, da ist nur der Name zu tauschen.

            Dein Code #1 ist mehr als umständlich. Mit parse_url wie schon empfohlen erledigst du das mit einer Zeile.

            Kommentar


            • #7
              Zitat von drsoong Beitrag anzeigen
              Genau darum geht es dem TE doch. Er kommt nur nicht mit den "preg-pendants" klar.
              Jetzt wo Du's sagst... Hatte das nur überflogen, sorry...
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                Es scheint es so als wenn er nur den Domainnamen haben will, damit gibt es aber mit parse_url( ... ) einige Schwierigkeiten, wie ich hier aufzeigen werde

                Version des TE mit preg_replace(...)
                PHP-Code:
                $url 'http://www.example.com/';

                $url3 preg_replace("#https#""http"$url);
                $url3 preg_replace("#http://www.#"""$url3);
                $url3 preg_replace("#http://#"""$url3);
                $url3 "$url3";
                $url4 "/";
                $url3 explode$url4$url3 );
                echo 
                $url3[0]; 
                Ergibt:
                example.com

                Das soll wohl das gewünschte Ergebnis darstellen, die reine Domain ohne Slash und www.

                Version mit parse_url( ... )
                PHP-Code:
                $url 'http://www.example.com/';

                echo 
                '1. ' .  parse_url($urlPHP_URL_PATH) . '<br>';
                echo 
                '2. ' .  parse_url($urlPHP_URL_HOST) . '<br>'
                Ergibt:
                1. /
                2. www.example.com

                Mit dem component PHP_URL_HOST bekommen wir zwar die Domain, jedoch immer noch mit www. davor, was einen weiteren Schritt nötig macht.

                Fehlt das Schema, wie es oft in Formularen bei Domainangaben der Fall ist (User gibt www.example.com ein), dann sieht unser Ergebnis folgendermaßen aus:
                1. www.example.com/
                2.

                Host bleibt leer die Domain steht im Path (zumindest bis Version 5.4.7 laut Handbuch).
                Ab Version 5.4.7 ändert sich das Verhalten, Die Domain steht nun im Host aber immer noch mit dem www. davor, was wieder einen weiteren Schritt nötig macht um an den Domainnamen nach Vorgabe des TE zu kommen.

                Die Funktion parse_url ist sinnvoll, wenn man die URL in seine Bestandteile aufteilt und genau einen davon haben möchte, nicht aber wenn man nur an den reinen Domainnamen will und die Ausgangssituation unklar ist.

                Daher hier eine Variante, die den Domainnamen ohne www. ausgibt und ohne Preg*-Funktionen auskommt..
                PHP-Code:
                $url 'http://www.example.com/';

                $remove = array("https://""http://""www.");
                $uri str_replace($remove""$url);
                $domain strstr($uri'/'TRUE);

                echo 
                $domain '<br>'
                Ergibt:
                example.com

                Kommentar


                • #9
                  Obige Varianten versagen wenn
                  1. ein Port angegeben ist ( :81 )
                  2. user: password@ benutzt wird
                  3. eine Query folgt (?par=.. )
                  4. ein Textanker folgt (#anker)
                  Ich bin mir auch nicht sicher, ob das Entfernen von www (die streng genommen eine Subdomain markiert) sinnvoll ist.

                  Dann:
                  Fixed host recognition when scheme is omitted and a leading component separator is present.
                  Die deutsche Übersetzung im Manual für parse_url ist nicht korrekt. Der Komponententrenner // muß vorhanden sein. Also www.example.com allein reicht nicht.

                  Kommentar


                  • #10
                    Zitat von jspit Beitrag anzeigen
                    Obige Varianten versagen wenn
                    1. ein Port angegeben ist ( :81 )
                    2. user: password@ benutzt wird
                    3. eine Query folgt (?par=.. )
                    4. ein Textanker folgt (#anker)

                    Ich bin mir auch nicht sicher, ob das Entfernen von www (die streng genommen eine Subdomain markiert) sinnvoll ist.
                    Ich habe nur die Variante vom TE genommen.
                    Vielleicht aussert er sich einfach noch mal dazu.

                    Zitat von jspit Beitrag anzeigen
                    Obige Varianten versagen wenn [LIST=1]
                    ie deutsche Übersetzung im Manual für parse_url ist nicht korrekt. Der Komponententrenner // muß vorhanden sein. Also www.example.com allein reicht nicht.
                    Doch, bei mir läuft es ganau so unter Wamp mit PHP Version 5.4.16. Probier es aus.

                    Kommentar


                    • #11
                      Zitat von protestix Beitrag anzeigen
                      Doch, bei mir läuft es ganau so unter Wamp mit PHP Version 5.4.16. Probier es aus.
                      Dann ist das nur in dieser Version so. Alle anderen zeigen für neuere Versionen:
                      PHP-Code:
                      <?php
                      $url 
                      "www.example.com";
                      $host parse_url($urlPHP_URL_HOST);
                      var_dump($host);  //NULL

                      $url "//www.example.com";
                      $host parse_url($urlPHP_URL_HOST);
                      var_dump($host);  //string(15) "www.example.com"
                      PHP-Sandbox



                      Kommentar


                      • #12
                        und jetzt probier das mal mit PHP_URL_PATH.
                        Das ist doch genau das Verhalten was ich in Beitrag#8 beschrieben habe.

                        Wenn man genau das Vorgegebene Ergebnis des TE nimmt dann ist parse_url ungeeignet.
                        Ich habe versucht das möglichst genau zu beschreiben, tut mir Leid wenn mir das nicht gelungen ist.

                        Port, Passwort und Textanker steht nichts davon im Ausgangsposting, es steht natürlich auch keine Beispiel-URL da, aber es stehen ja seine ereg-Funktionen dort und wenn man die anwendet kommt man auf das von mir geschilderte Ergebnis.
                        Wenn Textanker gefragt gewesen wäre, dann wäre das sicher nicht in dem von mir beschriebenen Beispiel gemündet.

                        Kommentar

                        Lädt...
                        X