[PHP] Code hervorheben WIE BBCODE

  • Themenstarter Themenstarter encom
  • Beginndatum Beginndatum
E

encom

Hallo, wie kann ich alle php Tags wie z.B. im Dreamweaver auch eine bestimmte Farbe zuweisen?

Ich gebe im Formular z.B

[ code ] und [ /code ] ein, dazwischen steht der php code

Jetzt soll nur alles dazwischen bearbeitet werden.

den einzelnen Wörtern würde ich gern vorgher die gewünschten Farben zuweisen.

Danke
 
Den einzelenen Wörtern eine Farbe zuweisen geht ungefär so:
PHP:
$text = preg_replace("/[wort]/isU", "<span style=\"color:#123456;\">Wort</span>");

Wenn du jetzt die Wörter nur zwischen Tags hervorheben willst:
PHP:
function colortags($text) {
    $text = preg_replace("/[wort]/isU", "<span style=\"color:#123456;\">Wort</span>");
    return $text;
}
preg_replace("/\[php\](.*)\[\/php\]/eisU", "colortags('$1')");

Für den Highlight im PHP-Style gibt die Funktion highlight-string
 
Danke dir, kannst du mir auch sagen wie ich alles zwischen " und " einschließlich der " rot bekomme?

Ich bekomme das mit den Delimetern nicht korrekt hin


Danke schon mal
 
Code:
$text = preg_replace("/\"(.*)\"/isU", "<span style=\"color:#FF0000;\">$1</span>");
 
Re:

Hallo,

ich würde ebenfalls gerne, das zwischen den code tags alles in den farben wie beim dreamweaver angezeigt wird.

doch leider hab ich das ganze nicht so verstanden.

mein code sie bisher so aus.
PHP:
function Code ($input) {

    $input = eregi_replace("\[code\]", "<span class=\"code\"><code>", $input); 
    $input = eregi_replace("\[/code\]", "</code></span>", $input); 

return $input;
    }

was muß ich dort verändern, daß alles in farbe angezeigt wird.

gruß kcyberbob
 
Zuletzt bearbeitet:
Ich würde das ganz so angehen: mit preg_replace filterst du dir alles was zwischen [.code], bzw [.php], jenachdem, ist heraus, und schreibts dir dazu wiederrum eine eigene Funktion die das dann entsprechend highlightet.
Ein Ansatz wäre:
Code:
function highlight( $text2do ) {
    $text2do = preg_replace("/\"(.*)\"/isU", "<span style=\"color:#FF0000;\">\"$1\"</span>");

    $highlightwords = array("wort1", "wort2", "wort3");
    foreach ($highlightwords as $oneword) {
        $text2do = str_replace($oneword, "<span style="color:#00FF00;">".$oneword."</span>", $text2do);
    }
    reutnr $text2do;
}

$alltext = preg_replace("/\[php\](.*)\[\/php\]/eisU", "highlight('$1')");

//Edit du könntest das mit dem Färben von Anführungszeichen noch etwas erweitern, indem du escapte Anführungszeichen ignorierst:
Code:
$text2do = preg_replace("/[^\\]\"(.*)[^\\]\"/isU", "<span style=\"color:#FF0000;\">\"$1\"</span>");
Bin mir nicht sicher, ob das funktioniert.
 
Zuletzt bearbeitet von einem Moderator:
Oh, da wan einn paar Fehler drin.
So funktionierts, ist getestet:
Code:
<?php

$alltext = "Bla bla bla [.php]wort1, \"bla bla\" df ds \"wort2\"[/.php] dffs";

function highlight( $text2do ) {
    $text2do = preg_replace("/[^\ ]\"(.*)[^\ ]\"/isU", "<span style=\"color:#FF0000;\">\"$1\"</span>", $text2do);

    $highlightwords = array("wort1", "wort2", "wort3");
    foreach ($highlightwords as $oneword) {
        $text2do = str_replace($oneword, "<span style=\"color:#00FF00;\">".$oneword."</span>", $text2do);
    }

    return $text2do;
}

$alltext = preg_replace("/\[php\](.*)\[\/php\]/eisU", "highlight('$1')", $alltext);

echo $alltext;
?>

//Edit mal ne Frage an die RegEx Profis:
"/[^\ ]\"(.*)[^\ ]\"/isU"
Mit den [^\ ] will ich verhindern, dass die escapten " nicht mit gefärbt werden. Nur leider ist nach dem Backslahs ein Leerzeichen, da es sonst nicht geht. Allerdings werden jetzt nur die \" ignoriert, die vor einem Leerzeichen stehen.
Wenn ich das Leerzeichen wegmache, dann wird die Klammer ] escaped, mit 2 oder drei \ gehts auch nicht.
Wie kann ich das umgehen?
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

also das mit dem highlighten funktioniert jetzt, ich habe es so gemacht.

Code:
function php_string($text)
{ 
  $text = stripslashes($text); 
  
  ob_start(); 
  highlight_string($text);  
  $text = ob_get_contents(); 
  ob_end_clean(); 

  return $text; 
}


function bbcode($text) 
{
  $text = preg_replace("/\[ PHP ](.*)\[\ /PHP \]/esiU", "php_string('$1')", $text); 
}


Aufgerufen wird das ganze so

Code:
   $text = bbcode($text);
   echo $text;

Gibt es nun noch die Möglichkeit die Schriftart des gehighlighten Textes in Arial und die Schriftgröße auf 10 oder 12 szu ändern?


Danke
 
Zurück