[URL] einfügen und [URL] bzw. [URL=xxx] ersetzen

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

  • [URL] einfügen und [URL] bzw. [URL=xxx] ersetzen

    Ich verzweifle langsam ...
    ich habe den regex aus dem codeschnipsel von abraxax, auto-verlinkung von url's.
    http://www.php-resource.de/forum/sho...threadid=14530


    also nach diesem suche ich in einem text und erweitere ihn davor mit [url] und dahinter mit [./url] (ohne punkt) , geht wunderbar.

    ich schaff's aber leider nicht, dass er diese ersetzung NUR dann durchführt, wenn vor dem regex KEIN "=" steht, dass von einem eingefügten tag [url=xxx] kommt.

    kann mir da jemand helfen?
    "Ersetze URL nur dann, wenn kein "=" davorsteht."
    ich will also im grunde genau das machen, was in diesem board auch funktioniert.


    P.S.:
    ich bekomme seit tagen bei der suchfunktion, egal was ich eingebe, "keine Treffer" angezeigt. selbst wenn ich "suchfunktion" eingebe und das wort kommt in diesem forum ja zuhauf vor
    Hab nurt ich das problem?
    Zuletzt geändert von graf; 29.08.2003, 16:55.

  • #2
    Zum Thema Suchfunktion:
    http://www.php-resource.de/forum/sho...threadid=19424
    hopka.net!

    Kommentar


    • #3
      @Hopka: Danke.

      Und für mein Problem hab ich nu nach etlichen Stunden des Probierens auch die Lösung hinbekommen:
      Code:
      $text = " ".$text; // sonst wird ganz am anfang nichts ersetzt
      // umschliessen von url's die einfach so in den text geschrieben worden sind
      $text =  preg_replace("/[ \n\r](([\w]+:\/\/|www)[\w-?&;#~=\.\/\@]+[\w\/][^\]\W])/is", " [.URL]\\1[./URL]", $text); // (ohne punkte bei URL)
      
      //ersetzen von [.URL]xxxxx[./URL] (ohne punkte)
      preg_match_all("!\[URL\](([\w]+:\/\/|www)[\w-?&;#~=\.\/\@]+[\w\/][^\]\W])\[\/URL\]!is", $text, $pregs);
      for ($j=0; $j<sizeof($pregs[0]); $j++) {
         $link = (strpos($pregs[1][$j],"://")) ? $pregs[1][$j] : "http://".$pregs[1][$j]; // prüfung ob protokoll mit angegeben
         $text = str_replace($pregs[0][$j], "<a class='smallLink' target='_blank' href='".$link."'>".$pregs[1][$j]."</a>", $text);
      }
      
      // und ersetzen von [.URL=xxx]yyy[./URL] (ohne punkte)
      preg_match_all("!\[URL=(([\w]+:\/\/)?[\w-?&;#~=\.\/\@]+[\w\/])\]([\w-?&;#~=\.\/\@\*\|\[\]\\\ ]*)\[\/URL\]!si", $text, $pregs);
      for ($j=0; $j<sizeof($pregs[0]); $j++) {
         $link = (strpos($pregs[2][$j],"://")) ? $pregs[1][$j] : "http://".$pregs[1][$j]; // prüfung ob protokoll mit angegeben
         $text = str_replace($pregs[0][$j], "<a class='smallLink' target='_blank' href='".$link."'>".$pregs[3][$j]."</a>", $text);
      }
      falls noch jemand ne kürzere lösung (oder eine "richtigere") hat ...
      EDIT:
      tja, leider wird es nicht richtig dargestellt. einige backslashes fehlen. kann man das verhindern?

      EDIT:
      Jetzt nutze es wieder passen. In dem du die code.tags benutze, statt der php.tags.
      Zuletzt geändert von graf; 01.09.2003, 11:23.

      Kommentar

      Lädt...
      X