PHP Tutorials, PHP lernen, PHP Forum, PHP Community and more ... MyWebsolution.de!

Sidebar

Home News Tutorials Workshops Tipps Artikel Gästebuch Sitemap Unicode

Suche

Members

Forum Login Registrierung

Statistik

Statistikbereich
Jetzt3
Heute173
Gestern333
Gesamt1571905

BB Code

Autor Flitze
Klicks 125865
Rating für BB Code
  8.6 von 10
Bewertungen184
Stand 11.06.2013
Keywords:
BB Code Tutorial, BBCode, BB-Code, BB Code mit Regex, BB Code erklärt, [php]-Tags, [code]-Tags, [img]-Tags, [url]-Tags, HTML ersetzen, HTML ausschalten, Text formatieren, Smilies ersetzen, Wörter kürzen, Links umwandeln, Links kürzen, Länge prüfen, http direkt umwandeln, www direkt umwandeln

Amazon: PHP 5.3 und MySQL 5.1
Breadcrumb:
Tutorials » BB Code
Seite : 1 2 3 4 5 6 7 Bewerten
Article Wizard - deutscher Article Spinner
BB-Code wird benutzt, um einem User die Möglichkeit zu geben, einen Text zu formatieren. Dabei werden gleich 2 Fliegen mit einer Klappe geschlagen. Zum einen ist BB-Code sehr simpel und kann somit auch von Usern ohne HTML-Kenntnisse - der übliche Internetcafe-User kann kein HTML ;) - benutzt werden und zum anderen kann man verhindern, dass ein User mittels Cross-Scripting die Seite zerstört. In diesem Tutorial werde ich eine auf REGEX basierende Möglichkeit beschreiben, BB-Code zu realisieren.

Dazu habe ich mir folgende Abschnitte überlegt:

1. Grundfunktionen
2. URL's umwandeln
3. Wörter kürzen
4. [IMG ] Tag
5. [QUOTE ] Tag
6. [PHP ] und [VAR ] Tags
7. Smilies

1. Grundfunktionen


In der Regel wird BB-Code in der Form [tag][/tag] in den Text eingefügt und ein Script wandelt die entsprechenden [tag]s dann in gültigen HTML Code um. Hier ein paar Beispiele (in den [tag]s dürfen natürlich keine Leerzeichen stehen):

[ b]Text[ /b] wird zu <b>Text</b> und erzeugt Text
[ i]Text[ /i] wird zu <i>Text</i> und erzeugt Text
[ u]Text[ /u] wird zu <u>Text</u> und erzeugt Text

etwas komplexer gehts auch so:

[ color=#ff0000]Text[ /color] wird zu
<span style="color:#ff0000;">Text<span> und erzeugt
Text

[ EMAIL=Webmaster@mywebsolution.de]Meine Email[ /EMAIL] wird zu
<a href="mailto:Webmaster@mywebsolution.de">Meine Email</a> und erzeugt
Meine Email

Realisieren kann man das mit dem folgenden Code:

PHP:
<?php 
$text 
preg_replace("/\[b\](.*)\[\/b\]/Usi""<b>\\1</b>"$text);
$text preg_replace("/\[i\](.*)\[\/i\]/Usi""<i>\\1</i>"$text);
$text preg_replace("/\[u\](.*)\[\/u\]/Usi""<u>\\1</u>"$text);
$text preg_replace("/\[color=(.*)\](.*)\[\/color\]/Usi""<span color=\"\\1\">\\2</span>"$text);
$text preg_replace("/\[email=(.*)\](.*)\[\/email\]/Usi""<a href=\"mailto:\\1\">\\2</a>"$text);
?>


$text ist der zu ändernde Text. Die Funktion preg_replace funktioniert folgendermaßen:

$variable = preg_replace (Suchmuster, Ersatz, zu_durchsuchender_Text [, int Limit [, int &Anzahl]] )

$variable
Enthält den neuen Text

Suchmuster
Mittels Regular Expressions (REGEX) aufgebautes Muster

Ersatz
String, der das Suchmuster ersetzen soll

zu_durchsuchender_Text
Der Text, der durchsucht werden soll

int Limit
Maximale Anzahl der Ersetzungen (muss eine Zahl sein)

int &Anzahl
Enthält die Anzahl der vorgenommenen Ersetzungen als Zahl (muss eine Variable sein)

int Limit und int &Anzahl sind optional und für unsere Zwecke unnötig, also beachten wir sie nicht weiter.

PHP:
<?php
$text 
preg_replace("/\[b\](.*)\[\/b\]/Usi""<b>\\1</b>"$text);
/*|||                 |||||||||||||||||||||    |||||||||   |||||
$variable                 Suchmuster            Ersatz      zu_durchsuchender_Text
*/
?>


Zunächst fällt auf, dass die Ergebnisvariable und der zu durchsuchende Text die gleiche Variable sind. Das ist natürlich logisch, da wir ja mehrere Ersetzungen vornehmen und am Ende eine Variable haben wollen, in der auch alle Ersetzungen stehen.

Das Suchmuster ist wie folgt aufgebaut
PHP:
<?php
  
"/ \[        b   \]       (.*)    \[\/b\]              /   Usi"
/* |  |        |    |        |         |                 |    |
   | escapte [ |   escapte ] | siehe vorher nur mit '/b' | Modifier
   |           |             |                           | 
 Delimiter  Buchstabe 'b' belibig viele Zeichen      Delimiter
*/
?>


Ein Suchmuster ist ein String und steht deshalb in "".
Am Anfang und am Ende stehen sog. Delimiter, in diesem Fall '/'.
Bestimmte Zeichen innerhalb des Musters müssen "maskiert" werden, weil sie eine Sonderbedeutung haben, wenn man das nicht macht. Maskieren tut man mit '\'.
Buchstaben und Zahlen kann man 'normal' einfügen.
(.*) bedeutet, dass beliebige Zeichen '.' beliebig oft '*' vorkommen dürfen.

Die Modifier legen das Verhalten des Suchmusters fest.
U => Ungreedy
s => Whitespaces werden auch als beliebige Zeichen betrachtet
i => Insensitiv, egal ob Groß- oder Kleinschreibung (wichtig für die 'b' ).

Das ist jetzt wirklich gaaanz komprimiert zusammengefasst. Wer früher noch nie etwas von Regex gehört hat, wird das wohl auch nicht nachvollziehen können. In diesem Fall könnt ihr euch z.B. hier informieren.

Dieser Regex findet jetzt alle Konstrukte im Text, die dem Suchmuster entsprechen. Ein solches Konstrukt könnte folgendermaßen aussehen:

[ b]Ein kurzer Text 123*$%&[ /b]

Wichtig dabei ist, dass das Konstrukt mit [ b] beginnt und mit [ /b] endet. Dazwischen kann irgendwas stehen.

Wenn ein entsprechendes Konstrukt gefunden wurde, muss es durch Ersatz ersetzt werden.

PHP:
<?php
 
"<b>         \\1           </b>"
/* |           |              |
   |       gefundener Text    |
 HTML Element <b>           HTML Element</b> 
*/ 
?>


Der Ersatz ist ebenfalls ein String und steht deshalb in "".
Mittels \\Zahl kann man auf gefundene Konstrukte zugreifen.
In \\0 steht immer das gesamte Konstrukt und danach, also in \\1 \\2 .., die Konstrukte, die in runden Klammern () stehen.

Beispiel dazu (unter Verwendung des o.g. Suchmusters):

[ b]Ein kurzer Text 123*$%&[ /b]

\\0 => [ b]Ein kurzer Text 123*$%&[ /b]
\\1 => Ein kurzer Text 123*$%&

Im Ersatz greifen wir nur auf \\1 zu, da uns die [b ][ /b] nicht weiter interessieren, denn sie werden durch die HTML-Elemente <b> und </b> ersetzt.

Das Ergebnis ist bekannt:

PHP:
<?php 
$text 
preg_replace("/\[b\](.*)\[\/b\]/Usi""<b>\\1</b>"$text);
?>


[ b]Ein kurzer Text 123*$%&[ /b] wird zu

<b>Ein kurzer Text 123*$%&</b> und erzeugt

Ein kurzer Text 123*$%&

Das Beispiel mit der Farbe funktioniert fast genauso. Der einzige Unterschied liegt darin, dass es 2 Klammerpaare gibt. Die erste Klammer enthält die Farbe als Hexzahl oder Farbwert und die zweite den Text, der in der Farbe dargestellt werden soll.

PHP:
<?php 
$text 
preg_replace("/\[color=(.*)\](.*)\[\/color\]/Usi""<font color=\"\\1\">\\2</font>"$text);
?>


[ color=#ff0000]Text[ /color] wird zu

<span style="color:#ff0000;">Text<span> und erzeugt

Text

  Weiter zur nächsten Seite:
BB Code - URL's umwandeln

»» Zurück zum Menu

Suchmaschinenoptimierung

Suchmaschinenoptimierung (SEO - Search Engine Optimization)

Ranking

Tutorials (13)

8.6
8.4
8.1

Workshops (3)

8.8
8.7
7.6

Tipps (13)

7.2
6.7
6.5

Artikel (26)

8.4
7.2
6.4

RSS Feeds

Full Feed Tutorials Workshops Tipps Artikel

Twitter

Follow me on Twitter

Partner & Links


Valid HTML 4.01 Transitional
Valid CSS
nach oben

Diese Seiten unterstützen MyWebsolution:
 
© MyWebsolution.de
2006-2016