Links erkennen und in Variable holen

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

  • Links erkennen und in Variable holen

    Hallo mal wieder,

    diesmal mit einem etwas kniffeligerem Problem (für mich zu mindest).

    Ich ziehe den Content für eine Website aus einer DB, diese beinhaltet auch links in normaler Link-Form (<a href="http://www.domain.de" target="_blank">Hier klicken...</a>).

    Nun ist es so, dass diese Links auch geändert werden müssen und zwar über ein Admin-Tool. (Der User hat null Ahnung von HTML!!!)

    Ich möchte also in meinem Admin den Content in eine Variable holen, diese soll dann durchforstet werden und mir alle Links, die auf der Seite vorkommen in ein Array holen. Das kann ich dann später weiterverarbeiten.

    Mir geht es hauptsächlich darum, wie nun mein Script einen Link-Tag erkennt, und den ganzen Inhalt in eine Variable holt. Es muss also alles, was zwischen "<a" und "/a>"steht erkennen.

    Wichtig ist auch, dass das nicht nur einmal gemacht wird, da im Content mehrere Links vorhanden sind.

    Hat da jemand vielleicht einen Lösungsvorschlag für mich oder ein kleines Script?
    Wäre super!!!

    Bitte aber nicht mit anderen Möglichkeiten kommen, das Ganze MUSS nach dieser Vorgehensweise funktionieren. Habe ich auch schon auszureden versucht, aber Chef will das so!

    Thanx, Andi

  • #2
    versuch doch nen regulären Ausdruck
    in der Form

    preg_match_all("#<a.*>(.*)</a>#isU",$inputtext,$matches);

    $matches ist ein Array of Array, dh.
    die Antworten findest du in

    $matches[1][0]
    $matches[1][1]
    $matches[1][2]
    $matches[1][3]
    ...

    mit count($matches[1]) weißte auch gleich wieviel Links er gefunden hat.

    PS: keine 100% Garantie für die regExp, ist ungetestet
    TBT

    Die zwei wichtigsten Regeln für eine berufliche Karriere:
    1. Verrate niemals alles was du weißt!


    PHP 2 AllPatrizier II Browsergame

    Kommentar


    • #3
      PHP-Code:
      preg_match_all("#<a (?:.*)href=\"?(.*)\"?(?:.*)>(.*)</a>#isU",$inputtext,$matches); 
      erweitert .. da linktext und link nicht dasselbe sein müssen

      $matches[1][$x] = url
      $matches[2][$x] = linktext

      mfg
      mfg,
      [color=#0080c0]Coragon[/color]

      Kommentar


      • #4
        Danke euch, werds gleich mal testen!

        Zu mindest habe ich jetzt schon mal einen Ansatz.

        Dank & Gruß, Andi

        Kommentar


        • #5
          Jetzt habe ich noch mal eine Frage:

          Wofür stehen die # in dem regulären Ausdruck und was bedeutet das #isU?

          Ich hate diese entfernt, bekomme dann aber eine Fehlermeldung, dass er den Modifier nicht erkennt. In meinem Handbuch finde ich aber nichts über diese Modifier, wo kann ich mehr darüber erfahren?

          Grüße, Andi

          Kommentar


          • #6
            # ist einfach ein begrenzer für die regexp ..
            du könntest auch / nehmen ..
            wenn du innerhalb dann / hast musst die halt escapen, darum in diesem fall #

            isU sind modifikatoren, eh schon richtig erkannt ..

            i = bah mir liegts auf der zunge *g* egal, einfach ob groß oder kleinschreibung ist egal ..
            s = heisst dass er bei . auch zeilenumbrüche findet ..
            U = keine ahnung hab ich auch nur von tbt übernommen *hehe*

            http://www.php.net/manual/de/pcre.pattern.modifiers.php
            mfg,
            [color=#0080c0]Coragon[/color]

            Kommentar


            • #7
              Thanx!

              Hab das jetzt mal getestet, aber irgendwie willer noch nicht so recht.

              Bei $matches[0][0] zeigt er mir der kompletten erkannten Teilstring an,
              bei $matches[0][2] zeigt er das mit der URL verknüpfte Wort, aber
              bei $matches[0][1] zeigt mir nichts an, da müsste doch dann die URL stehen?!?

              Leider bin ich mit den regexp noch nicht so fitt um selber herauszufinden was da schief läuft.

              Vielleicht kann mir da noch mal jemand auf die Sprünge helfen.

              preg_match_all("#<a (?:.*)href=\"?(.*)\"?(?:.*)>(.*)</a>#isU",$inputtext,$matches);

              So siehts derzeit aus.

              Grüße, Andi

              Kommentar


              • #8
                $matches[1][$x] = url
                $matches[2][$x] = linktext

                $matches[0] braucht dich nicht zu interessieren

                $matches[1][1] = url 1
                $matches[2][1] = linktext 1

                $matches[1][2] = url 2
                $matches[2][2] = linktext 2

                $matches[1][3] = url 3
                $matches[2][3] = linktext 3

                $matches[1][4] = url 4
                $matches[2][4] = linktext 4

                usw ..
                mfg,
                [color=#0080c0]Coragon[/color]

                Kommentar


                • #9
                  Sorry, habe mich hier verschrieben, natürlich habe ich es so gemacht, wie Du es gepostet hast, trotzdem bleibt die [1] leer.

                  <? print "0:".htmlspecialchars($matches[0][0]) ?><br>
                  <? print "1:".htmlspecialchars($matches[1][0]) ?><br>
                  <? print "2:".htmlspecialchars($matches[2][0]) ?><br>
                  <? print "0:".htmlspecialchars($matches[0][1]) ?><br>
                  <? print "1:".htmlspecialchars($matches[1][1]) ?><br>
                  <? print "2:".htmlspecialchars($matches[2][1]) ?><br>

                  Das Ergebnis:

                  0:<a href="http://www.test.com" target="_self">Mehr...</a>
                  1:
                  2:Mehr...
                  0:<a href="http://www.test.de">klick hier...</a>
                  1:
                  2:klick hier...

                  We erkennt einfach die URL nicht, aber er nimmt den ganzen Link?!?
                  Leigt es doch nahe, das was am regexp nicht stimmt


                  Gruß, Andi

                  Kommentar


                  • #10
                    PHP-Code:
                    $inputtext "<a href=\"http:// [..] </a> ";
                    preg_match_all("#<a (?:.*)href=\"(.*)\"(?:.*)>(.*)</a>#isU",$inputtext,$matches);
                    print_r($matches); 
                    Code:
                    Array
                    (
                        [0] => Array
                            (
                                [0] => <a href="http://www.test.com" target="_self">Mehr...</a>
                                [1] => <a href="http://www.test.com" target="_self">Mehr...</a>
                                [2] => <a href="http://www.test.com" target="_self">Mehr...</a>
                                [3] => <a href="http://www.test.com" target="_self">Mehr...</a>
                                [4] => <a href="http://www.test.com" target="_self">Mehr...</a>
                                [5] => <a href="http://www.test.com" target="_self">Mehr...</a>
                            )
                    
                        [1] => Array
                            (
                                [0] => [url]http://www.test.com[/url]
                                [1] => [url]http://www.test.com[/url]
                                [2] => [url]http://www.test.com[/url]
                                [3] => [url]http://www.test.com[/url]
                                [4] => [url]http://www.test.com[/url]
                                [5] => [url]http://www.test.com[/url]
                            )
                    
                        [2] => Array
                            (
                                [0] => Mehr...
                                [1] => Mehr...
                                [2] => Mehr...
                                [3] => Mehr...
                                [4] => Mehr...
                                [5] => Mehr...
                            )
                    
                    )
                    sorry, ich wollte vorhin die " beim href-attribut optional machen .. geht aber ned *g*
                    also so ..
                    mfg,
                    [color=#0080c0]Coragon[/color]

                    Kommentar


                    • #11
                      Ja super, jetzt läufts!

                      Was so ein kleines Fragezeichen alles anrichten kann

                      Ich glaube ich werde mich nun mal in die hohe Kunst der regulären Ausdrücke hineinarbeiten. Bisher konnte ich mich noch vor drücken, aber nun wirds wohl langsam Zeit dieses zu verstehen.

                      Danke für die Hilfe!

                      Gruß, Andi

                      Kommentar


                      • #12
                        ich danke auch .. schließlich bekomm ichs auch nur intus wenn ichs gebrauche 8)
                        mfg,
                        [color=#0080c0]Coragon[/color]

                        Kommentar

                        Lädt...
                        X