Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Teilstring zwischen zwei Markeren austauschen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Teilstring zwischen zwei Markeren austauschen

    Hallo da draußen!

    Bin neu hier und in php und habe folgendes Problem.
    Ich habe eine Text und darin befinden sich mehrer Teile mit <link>....Text...</link>, die ich gerne durch einen anderen Teilstring austauschen möchte.
    Mein Code dazu:

    PHP-Code:
    function linksearch($text)
    {           
              
    preg_match_all("!<link(.*)/link>!i",$text,$a,PREG_SET_ORDER);
                  
              if (
    $a[0]) {
                               
                   
    $i 0;
                   
    $temp $text;
                   foreach (
    $a as $c ) {
                        
                       
    $temp preg_replace("!<link(.*)/link>!i","<a href=\"http://meineSeite.at\"".$c[$i]."</a>",$temp,-1,$c[$i]);                 
                   
                   
    $i++;
                   }
              
    $text $temp;    
              return 
    $text;
              break;
              }
              else
             
             return 
    $text
       

    Funktioniert auch so weit so gut, doch im HTML steht dann etwa folgendes:

    Code:
    <a heref="http://www.....><link>...text...</link></a>
    Aber ich will das ganz <link></link> wegbringen und nur noch <a href="..">...Text...</a> stehen haben.

    Weiss aber nach langem suchen und probieren nicht mehr weiter.

    Danke im Voraus

    Christopher

  • #2
    Hi Christopher,

    versuch doch einfach mit der Funktion Str_Replace() <link> und </link> zu entfernen.

    Kommentar


    • #3
      ersetze mal:
      PHP-Code:
      preg_replace("!<link(.*)/link>!i","<a href=\"http://meineSeite.at\"".$c[$i]."</a>",$temp,-1,$c[$i]); 
      durch:
      PHP-Code:
      preg_replace("#<link>(.*?)</link>#i","<a href=\"http://meineSeite.at/$1\"</a>",$temp); 
      hoffe hab jetzt kein fehler gemacht...

      Kommentar


      • #4
        Solange wir nicht wissen, was ursprünglich zwischen <link> steht, beschränlen wirt uns eben auf Raten
        Auf jeden Fall ist $c[$i] schon mal Quatsch, weil für PREG_SET_ORDER der Schlüssel für jeden Datensatz immer konstant bleibt.

        Kommentar


        • #5
          Danke einmal für die schnellen Antworten!

          @nikosch:
          Das was zwischen den <link> und </link> steht soll ja bleiben und das tut es auch. Aber im String steht zb. <link 123#456>...Text...</link> und solche <link>'s können in einem String öfters vorkommen(werden aus einer DB ausgelesen).
          Darum die Schleife und das $c[$i]
          Im Endeffekt soll im HTML nur noch:

          Code:
          <a href="http://meineSeite.at/id=123">...text...</a>
          stehen und nicht:

          Code:
          <a href="http://meineSeite.at/id=123"><link 123#456>...text...</link></a>
          Die id hole ich mir aus dem was im <link 123#456> steht, was ja auch schon funzt, nur der HTML Code ist nicht wirklich sauber.

          lg

          Christopher

          PS: Stehe halt noch am Anfang meiner php-Reise

          Kommentar


          • #6
            Das was zwischen den <link> und </link> steht soll ja bleiben und das tut es auch. Aber im String steht zb. <link 123#456>...Text...</link> und solche <link>'s können in einem String öfters vorkommen(werden aus einer DB ausgelesen).
            Diese Info hast Du uns aber verschwiegen und das Format ist sehr wichtig bei regulären Ausdrücken. Dehalb stimmt auch md5's Variante nicht.
            Damit sollte sich die gesamte Funktion in etwas hierauf beschränken lassen (Linktext mußte bei Bedarf anpassen):
            PHP-Code:
            function linksearch($text)
              {           
              return (
            preg_replace('#<link\s*([^\s]*)>(.*?)</link>#i' '<a href="http://meineSeite.at/$1">$2</a>' ,  $text));
              } 

            Kommentar


            • #7
              Danke Nikosch,

              damit komme ich schon weiter. Aber eine Frage noch $1 und $2 beziehen sich die auf die Ausdrücke in der runden Klammer ([^\s]*)und (.*?) ??


              Habe ich noch nie gesehen, aber kein Wunder bin ja auch noch sehr grün hinter den Ohren.

              lg

              Christopher

              Kommentar


              • #8
                Ganz genau.
                $0 ist der gesamte Ausdruck
                $1 die erste Klammer usw.

                Kommentar


                • #9
                  Danke Nikosch!

                  Durch deinen Ansatz läuft das Ding jetzt und ich habe das mit den regulären Ausdrücken endlich verstanden.

                  lg

                  Christopher

                  Kommentar

                  Lädt...
                  X