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

Sidebar

Home News Tutorials Workshops Tipps Artikel Gästebuch Sitemap Pascal Landau

Suche

Members

Forum Login Registrierung

Statistik

Statistikbereich
Jetzt3
Heute238
Gestern438
Gesamt2386935

BB Code - PHP Tag - Quellcodeauszeichnung

Autor Flitze
Klicks 174546
Rating für BB Code
  8.6 von 10
Bewertungen187
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 » BB Code - PHP Tag - Quellcodeauszeichnung
Seite : 1 2 3 4 5 6 7 Bewerten
Article Wizard - deutscher Article Spinner[keywords]PHP Tag, Quellcode, VAR[keywords]


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("/(&#039;.*&#039;)/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

»» Zurück zum Menu

Suchmaschinenoptimierung

Suchmaschinenoptimierung (SEO - Search Engine Optimization)

Ranking

Tutorials (13)

8.6
8.4
8

Workshops (3)

8.8
8.7
7.6

Tipps (12)

7.2
6.7
6.5

Artikel (32)

8.4
8
7.2

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-2024