Str_Replace . Bereiche nicht Beachten.

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • AmicaNoctis
    replied
    Originally posted by bofan View Post
    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.

    Leave a comment:


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

    Leave a comment:


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

    Leave a comment:


  • AmicaNoctis
    replied
    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>
    Last edited by AmicaNoctis; 10-12-2009, 21:22.

    Leave a comment:


  • bofan
    started a topic 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.
    Last edited by bofan; 10-12-2009, 21:00.
Working...
X