Str_Replace . Bereiche nicht Beachten.

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

  • AmicaNoctis
    antwortet
    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.

    Einen Kommentar schreiben:


  • wahsaga
    antwortet
    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.

    Einen Kommentar schreiben:


  • bofan
    antwortet
    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.

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    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.

    Einen Kommentar schreiben:


  • bofan
    hat ein Thema erstellt Str_Replace . Bereiche nicht Beachten..

    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.
Lädt...
X