Eigene [ ] - Codes filtern

  • Guten Abend,


    ich habe einen - wenn man es so nennen kann - Editor geschrieben (PHP+JS).
    Es wird alles per MySQL gespeichert.
    Nun habe ich es geschafft, beim Auslesen, [ b] in <b> umzuconverten per str_replace.
    Aber wie geht das bei Farben?
    Beispiel:

    Code
    [color=blau]


    soll zu

    Code
    <font color="blue">


    Soll ich da jede einzelne Farbe replacen?


    mfg HB :thumbup:

  • Hmm. Stehe gerade auf dem Schlauch :S


    mit preg_replace komme ich genau so weit, wie mit str_replace


    ich ersetze [color] mit <font>
    Aber wie kann ich das ="blue" als color="blue" in den Tag setzen?


    PHP
    $search = array("[b]", "[/b]", "[i]", "[/i]", "[h2]", "[/h2]", "[h3]", "[/h3]", "[left]", "[/left]", "[center]", "[/center]", "[right]", "[/right]", "[justify]", "[/justify]", "[strike]", "[/strike]", "[u]", "[/u]");
    		$replace = array("<b>", "</b>", "<i>", "</i>", "<h2>", "</h2>", "<h3>", "</h3>", "<p align='left'>", "</p>", "<p align='center'>", "</p>", "<p align='right'>", "</p>", "<p align='justify'>", "</p>", "<strike>", "</strike>", "<u>", "</u>");
    
    		$newphrase = str_replace($search, $replace, $newstring);


    $newstring ist in dem Fall der Text aus der MySQL-DB

  • mit preg_replace komme ich genau so weit, wie mit str_replace


    Dann benutzt du es eindeutig falsch. preg_replace benutzt regular expressions (reguläre Ausdrücke), mit denen quasi ein "Wildcard-Replacement" ermöglicht wird.


    http://us3.php.net/preg_replace


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Deine Methode ist nicht wirklich dynamisch und wird für die [color=] tags auch im Leben nicht funktionieren, falls du beispielsweise hex codes für die Farben verwenden willst. Daher solltest du, wie LeijaT bereits erwähnt hat, preg_replace() verwenden.


    Das ganze funktioniert in etwa wie folgt: (du musst bei den regulären Ausdrücken beachten, dass alle möglichen Zeichen wie [, /, = etc. im Suchmuster mittels backslash (\) escaped werden müssen)


    PHP
    $finaler_string = preg_replace('/\[color\=(.*?)\](.*?)\[\/color\]/', '<font color=$1>$2</color>', $dein_string_mit_bb_tags);
    // das ganze kann natürlich mithilfe von Arrays kompakter bzw. kürzer verpackt werden: (damit die Funktion nur einmal aufgerufen werden muss)
    $bb_tags = array('/\[b\](.*?)\[\/b\]/', '/\[i\](.*?)\[\/i\]/', '/\[color\=(.*?)\](.*?)\[\/color\]/');
    $ersetze_mit = array('<b>$1</b>', '<i>$1</i>', '<font color=$1>$2</color>');
    $finaler_string = preg_replace($bb_tags, $ersetze_mit, $dein_string_mit_bb_tags);


    Ich empfehle dir definitiv dich ein wenig mit dem Thema zu befassen, da das ganze keine Selbstläufer ist. Mithilfe von regulären Ausdrücken (regex) hast du eine Menge Möglichkeiten, Daten zu filtern und/oder zu ersetzen. (siehe hier => http://de.wikibooks.org/wiki/Websiteentwicklung:_PHP:_Reguläre_Ausdrücke)

    Einmal editiert, zuletzt von BlueG ()