BBCode Problem mit URL und EMAIL

Hab ich sowas verdient?

Vielleicht kannst du den Code noch einwenig verbessern und schneller machen mit substr_count() oder so?

vielleicht schaust du mal hier nach. PHP
 
Kleine Anmerkung:
bei dieser Methode ist es böswilligen Menschen möglich, deine komplette Seite zu "zerfetzen".
du ersetzt die einzelnen Tags.... angenommen im Text ist ein öffnendes [ url ], das schliessende fehlt jedoch....dann hast du u.U. den Erfolg, dass der komplette Rest der Seite mit der angegebenen URL verlinkt ist.

Du solltest mittels RegExp unbedingt prüfen, ob ein gültiges Tag-Pärchen vorhanden ist, und erst dann ersetzen(sinnvollerweise ebenfalls per RegExp...da ginge das komplett in einer einzigen Zeile).


BTW: Ich schieb das Thema mal ins PHP-Board;)
 
Damit du das nochmal hier als Beispiel hast was fatalus meint:

PHP:
<?php
$bbcodes   = array();
$bbcodes[] = array("start" => "\[ url \]", "end" => "\[ /url \]", "into" => "<a href=\"$2\" target=\"_blank\">$2</a>");
$bbcodes[] = array("start" => "\[ email \]", "end" => "\[ /email \]", "into" => "<a href=\"mailto:$2\" target=\"_blank\">$2</a>");
$bbcodes[] = array("start" => "\[ b \]", "end" => "\[ /b \]", "into" => "<strong>$2</strong>");


function parseBBCode($string) {
	global $bbcodes;
	if(!is_String($string)) {
		return false;
	}
	
	foreach($bbcodes as $bbcode) {
		while(preg_match("|($bbcode[start])(.*?)($bbcode[end])|isU", $string)) {
			$string = preg_replace("|(". $bbcode['start'].")(.*?)(". $bbcode['end'].")|isU",$bbcode['into'], $string);
		}
	}
	return $string;
}


$string = "Dies ist eine Url: [ url ]http://www.foo.de[ /url ]\n[ email ]mail@foo.de[ /email ]";

$output = parseBBCode($string);

echo $output;
?>

Ist sicherlich noch erweiterbar, aber damit kannste deine BBCodes einfach in ein Array schreiben und der parst das dann.

Wenn du Erklärung zu dem Code brauchst dann sag bescheid ;)
 
Also im Prinzip glaub ich zu wissen was Du / Ihr meint... Allerdings blicke ich bei dem Code nicht wirklich durch. Ich denke es ist halt auch besser zu wissen was wo genau geschiet damit ich den Code vertehe... und dann beim nächsten mal nicht wieder frage wenn ich sowas ähnliches brauch ;) Dann kann ich mir den Rest sicher selbst gar zusammenstellen... ;)

Wäre echt genjal wenn du mir da den ein oder anderen Teil erklärst... und was ich anhand dem oberen code von mir ändern muss.....

Danke im Voraus!
 
Also im dem Array $bbcodes werden die eigentlichen BBCodes gespeichert. Man hat da bestimmte Teile (start, end, into). Im Datensatz "into" steht der Ausdruck drin, welcher dann den BBCode ersetzen soll. Dafür sollteste dich schon ein wenig mit Regulären Ausdrücken beschäftigt haben. Gibt ja hier auch ein Tutorial dafür.

PHP:
<?php
function parseBBCode($string) {
    global $bbcodes;        //Das Array mit den BBCodes wieder
    if(!is_String($string)) { //Überprüfung, ob die übergebende Variable eine Zeichenkette ist
        return false;
    }
    
    foreach($bbcodes as $bbcode) { //Alle Elemente des BBCode-Arrays durchegehen
        while(preg_match("|($bbcode[start])(.*?)($bbcode[end])|isU", $string)) { //Überprüfung, ob überhaupt noch der bestimmte BBCode im Text vorhanden ist, damit man ihn ersetzen kann
            $string = preg_replace("|(". $bbcode['start'].")(.*?)(". $bbcode['end'].")|isU",$bbcode['into'], $string); //BBCode mit Html-Code ersetzen
        }
    }
    return $string; //Rueckgabe ;)
} 
?>
 
Zurück