eregi_replace und urlencode

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

  • eregi_replace und urlencode

    Hallo,

    ich habe ein Problem beim Umwandeln eines String mit URL-Inhalt in einen Link. Im Prinzip funktioniert alles, nur soll der Link als Parameter an einen anderen URL übergeben werden. Enthält dieser Link jedoch selbst weitere Parameter, werden diese nicht ihm selbst, sondern (logischer Weise) dem aufgerufenen URL zugeordnet. (Ich weiß, klingt jetzt bekloppt, ich bringe gleich ein Beispiel.)

    Zuerst einmal der Code, der einen String nach URLs durchsucht und diese in Links umwandelt:

    Code:
    $text=eregi_replace(
    "((ht|f)tp://www\.|www\.)([a-z0-9-]+(\.[a-z0-9-]+)*
    (\.[a-z]{2,3})((/|\?)[a-z0-9~#%\&\\/'_\+=:\?\.-]*)*)",
    "http://www.\\3",
    $text
    );
    $text=eregi_replace(
    "((ht|f)tp://)((([a-z0-9-]+(\.[a-z0-9-]+)*
    (\.[a-z]{2,3}))|(([0-9]{1,3}\.){3}([0-9]{1,3})))((/|\?)[a-z0-9~#%\&'_\+=:\?\.-]*)*)",
    "<a class=\"bA\"
    href=\"http://url.chatter-online.com/?r=http://www.chatter-online.com&link=\\0\"
    target=\"\_blank\">\\1\\4</a>",
    $text
    );
    Enthält die Variable $text nun z.B. den URL http://www.blah.de?x=1, geht das wunderbar. Lautet er jedoch http://www.blah.de?x=1&z=2, wird der z-Parameter nicht mehr übergeben, da er natürlich als nächster Parameter dem aufrufenden URL zugeordnet wird.

    Folglich müsste ich alle ? und & im URL im Text (jedoch nur in diesem URL umwandeln. Das wäre an der Stelle link=\\0. Ich wollte dort urlencode anwenden, was jedoch nicht funktioniert. (Scheinbar wird urlencode ausgeführt, bevor der entsprechende Abschnitt \0 ausgegeben wird.)

    Wenn ich z.B. folgendes versuche:

    Code:
    ... online.com&link=".urlencode(\0)."\" target=\"\_blank ...
    Erhalte ich als Ausgabe lediglich eine 0 am link-Parameter im URL.

    Wie kann ich das nun lösen? Ich zerbreche mir seit Stunden den Kopf, komme aber auf nichts brauchbares. Im Netz habe ich auch nichts sinnvolles gefunden.

    Vielen Dank schon mal fürs Lesen,

    ADco
    Zuletzt geändert von ADco; 14.08.2004, 12:48.

  • #2
    hmm,

    versuchs doch mal mit preg_replace und modifier e
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      und brich den fu** code hier im forum um!
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Danke. Um das jedoch auf preg_replace umzubasteln, fehlt mir das entsprechende Wissen.

        Code ist umgebrochen

        Kommentar


        • #5
          Original geschrieben von ADco
          Code ist umgebrochen
          schon besser. beim nächsten mal bitte direkt!


          und zum thema regex kannst du hier dein wissen erweitern ...
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            Danke, diverse Erklärungen und Tutorials habe ich bereits studiert. In allen steht im Grunde dasselbe (was will man da auch schon viel anders machen *G*), bringt mich aber nicht weiter.

            Nun gut, ich habe das zuerst mal so belassen und eine alternative Möglichkeit gesucht und auch gefunden. Diese gefällt mir jedoch nicht, darum such ich nach einer neuen. Hier habe ich zwar einen Ansatz, komme aber nicht weiter. Vielleicht könnt ihr mir ja helfen.

            Ich mache alles wie gehabt und möchte nachher mit einem preg_replace die & Zeichen durch irgend etwas anderes ersetzen. Später soll die aufgerufene Seite das wieder zurückbasteln, das funktioniert so auch ohne Probleme, jedoch in einer Schleife. Und das gefällt mir nicht.

            Code:
            # Ein Beispiel einer übergebenen Variable
            
            $var="a href=\"http://url.weiterleitung.com/?r=http://www.referrer.com
            &link=http://www.blah.net/cgi-bin/forum.cgi?id=1&fid=3&tid=6&aha=7&ahoi=9\">blah<\/a>";
             
            # Alle Vorkommen von "&" sollen nach "&link=" durch "XXUNDXX" ersetzt werden
            
            $var=preg_replace("#(http:\/\/url.weiterleitung.com\/\?r=http:\/\/www.referrer.com\&link=)
            (.*)(\&)(.*)(\">)#si","\\1\\2XXUNDXX\\4\\5",$var);
            Nun, das funktioniert leider nicht ganz, denn er ändert nur das letzte &-Zeichen, den Rest nicht mehr. Warum das so ist, ist mir klar. Doch trotz dieser "Klarheit" komme ich auf keinen Ansatz, wie ich alle Vorkommen von "&" zwischen "...&link=" und "\">" ändern könnte, ohne dabei eine Schleife zu benutzen.

            Jemand eine Idee? Wäre toll.

            ADco

            Kommentar


            • #7
              Code:
              $var=preg_replace("
              #(http:\/\/url.weiterleitung.com\/\?r=http:\/\/www.referrer.com\&link=)(.*)(\">)
              #Uesi",'"$1".str_replace("&", "XXUNDXX","$2")."$3"',$var);
              probier mal ... sollte passen
              Zuletzt geändert von Wotan; 18.08.2004, 11:28.
              Kissolino.com

              Kommentar


              • #8
                Vielen Dank, läuft wunderbar.

                Muss das Teil nachher noch ein wenig studieren.

                Danke.

                Kommentar


                • #9
                  Menno, läuft doch nicht ;(

                  Wenn nur ein URL in der Variable steht, geht es wunderbar, das ist natürlich schon ein Fortschritt. Stehen jedoch mehrere URL in der Variable, wird nur der erste richtig umgewandelt, alle anderen nicht mehr ;(

                  Kommentar


                  • #10
                    läuft bei mir 1a auch mit mehreren ... darf nur kein umbruch in der url vorkommen ...
                    Kissolino.com

                    Kommentar


                    • #11
                      O.K., war mein Fehler. Ich habe den Text noch davor nach 100 Zeichen umbrechen lassen. Jetzt geht es und bisher haben unsere User noch keine (weitere) Möglichkeit gefunden, bei der es nicht geht

                      Nochmals vielen Dank

                      Kommentar

                      Lädt...
                      X