[PHP] Code hervorheben WIE BBCODE

  • Themenstarter Themenstarter encom
  • Beginndatum Beginndatum
Klar, du musst z.B. die Zeile hier: return $text; in die ändern:
PHP:
return "<span style=\"font-family:Arial;font-size:12pt;\">".$text."</span>";
 
Vielen Dank, hast mir wirklich sehr weitergeholfen.

Vor allem die Geschwindigkeit in der man hier gute Antworten bekommt ist schon toll.
 
Re:

wo ist denn da die farbe?

ich habe ein kleines script draus gemacht:

PHP:
<?

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); 
return $text;
}
if ($action == "see") {


$ausgabe = bbcode($text);
   
   echo "$ausgabe"; 
   echo "<br>";
   echo "$text";
   }
   
   
if ($action == "send") {
?>
<form name="form1" method="post" action="test.php?action=see">
  <textarea name="text"></textarea>
  <input type="submit" name="Submit" value="Abschicken">
</form>
<?
}
?>
 
Re:

ok es kommt doch eine farbe aber das ganze sieht nicht so aus wie in dem forum hier und die farbe kommt nur wenn ich <? diese tags schreibe.
woran liegt das?
 
Zuletzt bearbeitet:
Re:

aber da kommt auch immer diese zeile
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /data/members/free/tripod/de/k/c/y/kcyberbob/htdocs/test.php on line 10
 
Original geschrieben von Nuinmundo
//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?

Deine RegExp könnte z.B. so aussehen:
Code:
/[^\\\\]\"(.*[^\\\\])\"/isU
Also hättest du einen Schritt weitergehen und vier \ benutzen sollen :p ;) Wieso? Ganz klar, du willst in der RegExp ein '\\' stehen haben. Weil das Escape-Zeichen allerdings escaped werden muss, muss im RegExp '\\\\' stehen. Wenn du allerdings in einem PHP-String ein '\\' stehen haben willst, musst du diese nochmals escapen. Also brauchst du tatsächlich ganze vier Escape-Zeichen. Alles klar? ;-)
Ach ja, noch was. Den zweiten Ausdruck "ein beliebiges Zeichen aber kein \\" musst du in die runde Klammer hineinziehen, sonst geht dir beim Ersetzen dieses Zeichen ab.

Ansonsten zum eigentlichen Thema: Ich wäre auch sehr dafür hier die mitgelieferte Funktion highlight_string() zu benutzen. Zum Problem mit den '<? ?>': Vor dem highlighten prüfen ob diese Tags im zu hervorhebenden String auftauchen; wenn nein, hinzufügen und nach dem Parsen wieder entfernen.

PS: Diese Erkennung und das eventuelle Hinzufügen von PHP-Tags lässt sich aber auch schnell aushebeln, wie dieses Beispiel hier zeigen sollte :p

PHP:
echo "Dies ist hier ist ein PHP-String,
in dem ein PHP-Tag auftaucht: <? $x = 1; ?>.
Die Forensoftware merkt allerdings nicht, dass
das hier alles in einem String steht und fügt keine
<? ?> hinzu, was dazu führt dass der Code nicht so
gehighlightet wird wie man sich das vielleicht
vorstellt";

reima: 1
vBB: 0

Hehe.
 
An und für sich funktioniert das ganze schon recht gut! Aber wei siehts hier mit Verschachtelung aus! Wie könnte man das den bewerkstelligen
 
Hi, ich habe gerade ein ähnliches Problem. Ich habe ein paar Anleitungen geschrieben und möchte diversen php code aus einer MYSQL Datenbank highlighten.

Wenn ich die highlightfunktion in die Datenbank eintreage bekomme ich nur "?> " in meinem Ergebnisformular ausgegeben.

HAt einer von euch eine Idee, wie ich meinen Text Highlighten kann?

Über Hilfe bin ich sehr dankbar.
Viele Grüße dline
 
Zurück