You are not logged in.

  • Login

1

Tuesday, October 6th 2009, 6:45pm

BB-Code Selber machen

Hallo,

Ich möchte mir gerne einen eigenen BB-Code zusammenbasteln, dabei treten nun folgende Probleme auf:

1. Wenn ich die Zeilenumbrüche mit nl2br umwandle funktioniert die replace-funktion nicht mehr. (wandel ich das ganze allerdings mit str_replace um gehts)

2. Es sind keine BB-Codes in anderen BB-Codes möglich.

Der Code

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?
	//Str zum Testen definieren
	$str = "[u]Hallo<br \>\nHallo[/u]";
 
	//Unnötge Leerzeichen an Anfang und Ende Weg
	$str = trim($str);
 
	//\n und <br \> umwandeln für Texte aus der DB
	$str = nl2br($str);
 
	//Auch Umwandeln allerdings anders
	//$pattern = "/\\n/";
	//$str = preg_replace($pattern, '<br />', $str);
 
	//BB-Codes b,u,i
	$pattern = "#\[(b|u|i)\](.*)[<br \>]?\[/(\\1)\]#";
	$str = preg_replace($pattern, '<$1>$2</$1>', $str);
 
	//BB-Code url
	$pattern = "#\[url=(.*)\](.*)\[/url?]#";
	$str = preg_replace($pattern, '<a href=\'$1\'>$2</a>', $str);
 
	//BB Code color
	$pattern = "#\[color=(.*)\](.*)\[/color?]#";
	$str = preg_replace($pattern, '<font color=\'$1\'>$2</font>', $str);
 
	//Ausgabe
	echo $str;
?>

2

Tuesday, October 6th 2009, 8:08pm

Hi,

erstmal eine kurze Frage: Willst du eine fertige Lösung vermeiden?
Es gibt schließlich PHP Klassen für BBCodes - die sparen viel Arbeit.

Du musst dir keine Gedanken um Cross Site Scripting (bei dir vermutlich möglich) kümmern, bekommst auch bbcodes in bbcodes hin (bei dir vermutlich nicht möglich), uvm.
Es gibt auch schon ein paar Threads zum Thema BBCode hier im Forum. Zum Beispiel hier: BBCODE

Ohne nl2br klappt dein Code übrigens auch nicht.

PHP Quellcode

1
// $str = nl2br($str);


Willst du wirklich noch das eigentlich Problem lösen? Dann müssen wir uns die Regex mal anschauen. Ich glaube es fehlt ein Regex Modifier. S, s, u oder U.

3

Tuesday, October 6th 2009, 10:41pm

Quoted

erstmal eine kurze Frage: Willst du eine fertige Lösung vermeiden?
Es gibt schließlich PHP Klassen für BBCodes - die sparen viel Arbeit.


Ja, ich möchte das Ding komplett selber machen. Ich nutze prinzipiell keine fertigen Sachen, hat man nur Ärger mit. Die Arbeit nehme ich gerne in kauf.

Quoted


Ohne nl2br klappt dein Code übrigens auch nicht.


Das weiß ich. Hilft mir allerdings nicht wirklich weiter.


Quoted


Willst du wirklich noch das eigentlich Problem lösen? Dann müssen wir uns die Regex mal anschauen. Ich glaube es fehlt ein Regex Modifier. S, s, u oder U.

Ja Modifier S würde ich denken:

Quoted

Modifier s (dot all)

Normalerweise trifft der Punkt nicht auf Zeilenumbrüche zu. Mit diesem Schalter werden mit dem Punkt auch Zeilenumbrüche erkannt.

This post has been edited 1 times, last edit by "Knud" (Oct 6th 2009, 10:48pm)


4

Wednesday, October 7th 2009, 6:09pm

Dann klappts jetzt? Wegen dem xss problem solltest du strip tags verwenden.

Social bookmarks