BB Code - PHP Tag - Quellcodeauszeichnung
Autor
Flitze
Klicks 174546
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
Klicks 174546
Rating für BB Code
8.6 von 10
Bewertungen187
Stand
11.06.2013
8.6 von 10
Bewertungen187
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
Breadcrumb:
Tutorials » BB Code » BB Code - PHP Tag - Quellcodeauszeichnung
[keywords]PHP Tag, Quellcode, VAR[keywords]
Beispiele:
[ php]<?php
echo "Hallo Welt";
$hw = 'Hallo '.'Welt';
$array = array();
$array['Hallo'] = "Welt";
$array[1] = 23;
?>[ /php]
==>
PHP:
[ var]$variable[/ var] => $variable
[ var]$variable['array'][ /var] => $variable['array']
[ var]$variable[1][ /var] => $variable[1]
Der [ var]-Tag ist mir sonst nirgendwo bekannt, ich hab ihn eigentlich nur geschrieben, damit ich in den Tutorials etc.. Variablen außerhalb der [ PHP]-Tags hervorheben kann. Ich fang mal mit ihm an, weil er nicht so kompliziert zu beschreiben ist
Hier der Code für den Regex
PHP:
Soweit noch nichts besonderes. Ich suche also wie auch zuvor nach [ var]-Tags und wende dann mittels preg_replace_callback eine Funktion darauf an. Diese Funktion heißt parseVar und sieht folgendermaßen aus:
PHP:
Die verwendeten Regexe sollten soweit verständlich sein. Für die Klammer reicht ein simples str_replace.
Die PHP-Funktion ist wie bereits angedeutet etwas komplexer, weil man mehrere Dinge beachten muss. Zunächst einmal muss komplett unveränderter Text übergeben werden, der danach auch nicht weiter verändert werden darf. Das ist nötig, weil sonst die anderen BB-Code Funktionen bzw. alle anderen textbeeinflussenden Funktionen ihren Senf zum Quellcode hinzufügen würden (z.B. Einfügen von Smilies oder Trennen nach zu viele aneinanderhängenden Zeichen). Aus diesem Grund muss der PHP-Code vor jeder anderen Veränderung zwischengespeichert werden und darf erst ganz am Ende wieder eingefügt werden.
Ein entsprechender Code könnte so aussehen
PHP:
Wie auch beim Zitat möchte ich PHP-Code deutlich kennzeichnen und weise im deshalb einen eigenen <div>-Container zu. Dieser bekommt zusätzlich noch die Eigenschaft overflow:auto; weil PHP-Code scho nmal sehr breit werden kann. Das hat wiederum einen Layout-zerstörerischen Effekt. Da es sich aber manchmal nicht vermeiden lässt, das ein Code ein wenig länger ist und ich den Code nicht verfälschen möchte, füge ich mit dieser CSS-Eigenschaft Scrollbalken hinzu, falls der Code wirklich zu breit wird.
Mit der Funktion preg_match_all werden alle Vorkommnisse von PHP-Code in [ PHP]-Tags in dem array $php gespeichert. In $php[0] sind dabei noch die [ PHP]-Tags enthalten, in $php[1] hingegen steht nur noch das, was von den runden Klammern gefunden wurde, sprich der "reine" Code.
Durch eine foreach-Schleife ersetze ich nun jeden Code-Teil durch den jeweiligen Schlüssel, also $key des Array-Elementes, in dem er gespeichert ist. Zum suchen benutze ich dabei das Array $php[0], aber ich verändere den Wert von $php[1].
Ein kleines Beispiel zu Veranschaulichung:
Vorher:
[ php]<?php echo "Hallo Welt";
$hw = 'Hallo '.'Welt';
$array = array();
$array['Hallo'] = "Welt";
?>[ /php]
Nachher:
[ php]0[ /php]
So, den Code, den wir eben zwischengespeichert haben, müssen wir nun natürlich noch "bearbeiten", also farblich hervorheben. Dazu stellt uns PHP netterweise die Funktion highlight_string zur Verfügung, die genau dies tut. Um den Code nicht direkt an dieser Stelle auf dem Bildschirm auszugeben, muss als zweiter Parameter TRUE übergeben werden. Diesen bearbeiteten Code speichere ich wieder in $php[1] mit dem entsprechenden $key.
Danach folgen die anderen BB-Code-Umwandlungen und sonstigen Textbearbeitungen.
Als allerletztes wird der Code dann wieder ersetzt. Das sieht dann als Code so aus
PHP:
Es wird also gezielt nach dem jeweiligen $key gesucht und dieser dann wieder durch den veränderten Code ersetzt. Veranschaulicht:
Vorher:
[ php] <?php
echo "Hallo Welt";
$hw = 'Hallo '.'Welt';
$array = array();
$array['Hallo'] = "Welt";
?>
[ /php]
Nachher:
PHP:
Zurück zur vorigen Seite:
BB Code - Der QUOTE Tag Weiter zur nächsten Seite:
BB Code - Smilies
6. [PHP ] und [VAR ] Tags
[ADSENSE_LINE]Beispiele:
[ php]<?php
echo "Hallo Welt";
$hw = 'Hallo '.'Welt';
$array = array();
$array['Hallo'] = "Welt";
$array[1] = 23;
?>[ /php]
==>
PHP:
<?php
echo "Hallo Welt";
$hw = 'Hallo '.'Welt';
$array = array();
$array['Hallo'] = "Welt";
$array[1] = 23;
?>
[ var]$variable[/ var] => $variable
[ var]$variable['array'][ /var] => $variable['array']
[ var]$variable[1][ /var] => $variable[1]
Der [ var]-Tag ist mir sonst nirgendwo bekannt, ich hab ihn eigentlich nur geschrieben, damit ich in den Tutorials etc.. Variablen außerhalb der [ PHP]-Tags hervorheben kann. Ich fang mal mit ihm an, weil er nicht so kompliziert zu beschreiben ist
Hier der Code für den Regex
PHP:
<?php
$text = preg_replace_callback("/\[var\](.*)\[\/var\]/Usi", 'parseVar', $text);
?>
Soweit noch nichts besonderes. Ich suche also wie auch zuvor nach [ var]-Tags und wende dann mittels preg_replace_callback eine Funktion darauf an. Diese Funktion heißt parseVar und sieht folgendermaßen aus:
PHP:
<?php
function parseVar($treffer)
{
// $treffer[1] ist die Variable zwischen den [var]-Tags
$str = $treffer[1];
// Klammer in grün hervorheben
$str = str_replace("[", "<span style=\"color:#007700\">[</span>", $str);
$str = str_replace("]", "<span style=\"color:#007700\">]</span>", $str);
// alles was zwischen single quotes ( ') steht rot hervorheben
$str = preg_replace("/('.*')/Uis", "<span style=\"color:#DD0000\">\\1</span>", $str);
// den Rest blau hervorheben
$str = "<span style=\"color:#0000BB\">".$str."</span>";
return $str;
}
?>
Die verwendeten Regexe sollten soweit verständlich sein. Für die Klammer reicht ein simples str_replace.
Die PHP-Funktion ist wie bereits angedeutet etwas komplexer, weil man mehrere Dinge beachten muss. Zunächst einmal muss komplett unveränderter Text übergeben werden, der danach auch nicht weiter verändert werden darf. Das ist nötig, weil sonst die anderen BB-Code Funktionen bzw. alle anderen textbeeinflussenden Funktionen ihren Senf zum Quellcode hinzufügen würden (z.B. Einfügen von Smilies oder Trennen nach zu viele aneinanderhängenden Zeichen). Aus diesem Grund muss der PHP-Code vor jeder anderen Veränderung zwischengespeichert werden und darf erst ganz am Ende wieder eingefügt werden.
Ein entsprechender Code könnte so aussehen
PHP:
<?php
$php_start = "<br><b><u>PHP</u></b>\n".
"<div style=\"border:solid 1px black; background-color:#ffffff; margin:0px auto; width:565px; overflow:auto; white-space:pre\">\n";
$php_end = "</div>\n";
$php = array();
// PHP Code zwischenspeichern, damit er nicht durch andere Funktionen (z.B. nl2br) verfälscht wird
preg_match_all("/\[php\](.*)\[\/php\]/siU", $text, $php);
foreach($php[0] as $key => $value){
// Im Text durch eine Variable ersetzen, um diese dann später wiederum durch den Code zu ersetzen
// bitte achtet darauf, dass ihr bei [ php] und [ /php] das Leerzeichen entfernen müsst!
$text=preg_replace('#'.preg_quote($value, '#').'#','[ php]'.$key.'[ /php]',$text,1);
// Code highlighten
$php[1][$key] = highlight_string($php[1][$key], TRUE);
$php[1][$key] = $php_start.$php[1][$key].$php_end;
}
?>
Wie auch beim Zitat möchte ich PHP-Code deutlich kennzeichnen und weise im deshalb einen eigenen <div>-Container zu. Dieser bekommt zusätzlich noch die Eigenschaft overflow:auto; weil PHP-Code scho nmal sehr breit werden kann. Das hat wiederum einen Layout-zerstörerischen Effekt. Da es sich aber manchmal nicht vermeiden lässt, das ein Code ein wenig länger ist und ich den Code nicht verfälschen möchte, füge ich mit dieser CSS-Eigenschaft Scrollbalken hinzu, falls der Code wirklich zu breit wird.
Mit der Funktion preg_match_all werden alle Vorkommnisse von PHP-Code in [ PHP]-Tags in dem array $php gespeichert. In $php[0] sind dabei noch die [ PHP]-Tags enthalten, in $php[1] hingegen steht nur noch das, was von den runden Klammern gefunden wurde, sprich der "reine" Code.
Durch eine foreach-Schleife ersetze ich nun jeden Code-Teil durch den jeweiligen Schlüssel, also $key des Array-Elementes, in dem er gespeichert ist. Zum suchen benutze ich dabei das Array $php[0], aber ich verändere den Wert von $php[1].
Ein kleines Beispiel zu Veranschaulichung:
Vorher:
[ php]<?php echo "Hallo Welt";
$hw = 'Hallo '.'Welt';
$array = array();
$array['Hallo'] = "Welt";
?>[ /php]
Nachher:
[ php]0[ /php]
So, den Code, den wir eben zwischengespeichert haben, müssen wir nun natürlich noch "bearbeiten", also farblich hervorheben. Dazu stellt uns PHP netterweise die Funktion highlight_string zur Verfügung, die genau dies tut. Um den Code nicht direkt an dieser Stelle auf dem Bildschirm auszugeben, muss als zweiter Parameter TRUE übergeben werden. Diesen bearbeiteten Code speichere ich wieder in $php[1] mit dem entsprechenden $key.
Danach folgen die anderen BB-Code-Umwandlungen und sonstigen Textbearbeitungen.
Als allerletztes wird der Code dann wieder ersetzt. Das sieht dann als Code so aus
PHP:
<?php
//PHP Code wieder einfügen
foreach($php[1] as $key => $value)
$text = preg_replace("/\[php\]".$key."\[\/php\]/siU", $value, $text);
?>
Es wird also gezielt nach dem jeweiligen $key gesucht und dieser dann wieder durch den veränderten Code ersetzt. Veranschaulicht:
Vorher:
[ php] <?php
echo "Hallo Welt";
$hw = 'Hallo '.'Welt';
$array = array();
$array['Hallo'] = "Welt";
?>
[ /php]
Nachher:
PHP:
<?php
echo "Hallo Welt";
$hw = 'Hallo '.'Welt';
$array = array();
$array['Hallo'] = "Welt";
?>
Zurück zur vorigen Seite:
BB Code - Der QUOTE Tag Weiter zur nächsten Seite:
BB Code - Smilies