Str_Replace . Bereiche nicht Beachten.

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

  • Str_Replace . Bereiche nicht Beachten.

    Hi.

    Ich steh mal wider auf dem Schlauch.

    Ich habe eine Funktion.

    Die Ersetzt mir Automatisch einige Sachen in meinem Content.

    Auszug.
    Code:
        $pfad = aktueller_pfad();
        $urlsearch[] = "/([^]_a-z0-9-=\"'\/])((https?|ftp):\/\/|www\.)([^ \r\n\(\)\*\^\$!`\"'\|\[\]\{\};<>]*)/si";
        $urlsearch[] = "/^((https?|ftp):\/\/|www\.)([^ \r\n\(\)\*\^\$!`\"'\|\[\]\{\};<>]*)/si";
        $urlreplace[]= "\\1[URL]\\2\\4[/URL]";
        $urlreplace[]= "[URL]\\1\\3[/URL]";
        $text = preg_replace($urlsearch, $urlreplace, $text);
        $text = preg_replace("/\[URL\](.*?)\[\/URL\]/si", "<a href=\"\" onclick=\"javascript:window.open('".$pfad."/out.php?url=\\1')\">\\1</a>", $text);
        $text = preg_replace("/\[URL=(.*?)\](.*?)\[\/URL\]/si", "<a href=\"\" onclick=\"javascript:window.open('".$pfad."/out.php?url=\\1')\">\\2</a>", $text);
        $text = str_replace("href=\"http://","href=\"http://www",$text);
        $text = str_replace("href=\"www","href=\"http://www",$text);
        $text = preg_replace("/\[B\](.*?)\[\/B\]/si", "<span style='font-weight:bold;'>\\1</span>", $text);
        $text = preg_replace("/\[U\](.*?)\[\/U\]/si", "<span style='text-decoration:underline;'>\\1</span>", $text);
        $text = preg_replace("/\[I\](.*?)\[\/I\]/si", "<span style='font-style:italic;'>\\1</span>", $text);
        $text = preg_replace("/\[wert\](.*?)\[\/wert\]/si", "<span style='font-weight:bolder'>&bull;</span> \\1<br/>", $text);
        $text = preg_replace("/\[wert=(.*?)\](.*?)\[\/wert\]/si", "<span style='font-weight:bolder'>\\1</span> \\2<br/>", $text);
        $text = preg_replace("/\[color=(.*)\](.*)\[\/color\]/si", "<span style=\"color:\\1;\">\\2</span>", $text);
        $text = preg_replace("/\[I_URL=(.*?)\](.*?)\[\/I_URL\]/si", "<a href=\"\\1\">\\2</a>", $text);
    naja. Nun will ich dass ich
    wenn ich z.B.

    [DO_NOT]BEREICH X[/DO_NOT]

    eingebe, der BEREICH X nicht Formatiert wird.

    Hat da jem. mal einen Tipp.
    Zuletzt geändert von bofan; 10.12.2009, 21:00.
    Beachte: Dumm ist, wer Dummes tut.

  • #2
    Hallo,

    du könntest die Sachen die nicht ersetzt werden sollen vorher maskieren. Dafür bietet sich ein Array an, in dem die gespeichert werden. Im Text werden sie dann z. B. durch [0x01][Array-Index][0x02] ersetzt. Nachdem du die eigentliche Ersetzung durchgeführt hast, gehst du das Array mit foreach durch und stellst den Text wieder her. Die Steuerzeichen 0x01 und 0x02 sind dafür günstig, weil sie normalerweise nicht in Texten vorkommen.

    Gruß,

    Amica

    Edit: Noch ein Beispiel obendrauf...
    PHP-Code:
    <?php
        
    function callback ($a$b) {
            return 
    strlen($b) - strlen($a);
        }
        
    $text "Dokumente in der HyperText Markup Language enthalten viel Text und noch mehr Markup";
        
    $verlinken = array("Markup""Text""HyperText Markup Language");
        
    usort($verlinken"callback");
        
    $cache = array();
        foreach (
    $verlinken as $id => $string) {
            
    $cache[$id] = "<a href=\"#\">" $string "</a>";
            
    $text str_replace($string"\x01" $id "\x02"$text);
        }
        foreach (
    $cache as $id => $string) {
            
    $text str_replace("\x01" $id "\x02"$string$text);
        }
        echo(
    $text);
    ?>
    HTML-Code:
    ohne usort: Dokumente in der Hyper<a href="#">Text</a> <a href="#">Markup</a> Language
                enthalten viel <a href="#">Text</a> und noch mehr <a href="#">Markup</a>
    
    mit usort:  Dokumente in der <a href="#">HyperText Markup Language</a> enthalten viel
                <a href="#">Text</a> und noch mehr <a href="#">Markup</a>
    Zuletzt geändert von AmicaNoctis; 10.12.2009, 21:22.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Achso. Die verlinkung/Ersetung funktioniert.

      Ich will ja jetzt. z.B. in einem Text... (Gold wird ersetzt) wahlweise die Ersetzung ausschalten.

      Der Goldgräber gräbt in der Goldmine nach Gold.

      Dann will ich z.B. haben

      Der <a href='#'>Gold</a>gräber gräbt in der Goldmine nach <a href='#'>Gold</a>.

      Dafür möchte ich dann eingeben haben.
      Der Goldgräber gräbt in der [DO_NOT]Goldmiene[/DO_NOT] nach Gold.
      Beachte: Dumm ist, wer Dummes tut.

      Kommentar


      • #4
        Ich würd' das selbst gebastelte wegwerfen, und das hier nutzen:
        BBCode-Parserklasse für PHP

        Das ist ein vollständiger Parser, den man umfangreich konfigurieren kann - damit kann man auschliessen, dass invalides HTML herauskommt; was du bei einer rein preg-basierten Umsetzung ganz sicher nicht kannst.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Zitat von bofan Beitrag anzeigen
          Achso. Die verlinkung/Ersetung funktioniert.

          Ich will ja jetzt. z.B. in einem Text... (Gold wird ersetzt) wahlweise die Ersetzung ausschalten.
          ... was ja mit dem genannten Prinzip genau so geht. Nur wollte ich dir nicht gleich die komplett fertige Lösung präsentieren, da hast du ja selbst keinen Spaß mehr.

          Ansonsten ist wahsagas Einwand natürlich auch berechtigt.
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar

          Lädt...
          X