BBCode [CODE] Tag Problem (geshi)

bomberpilotmp3

Erfahrenes Mitglied
Guten Tag, ich habe ein riesen Problem. Ich habe schon das Forum druchsucht, und ähnliche Probleme gefunden. Aber momentan komme ich nicht weiter.

Kurze Vorgeschichte:
Ich habe ein eigenes CMS bzw. ein Forum programmiert. Läuft soweit ganz gut :) Nur ich biete bei mir BBCode an. Funkionen auch perfekt. Nur ich habe ein Problem beim BBCode mit dem Code Tag.

Ich benutze Geshi (übrigens bestes Highlight Script, danke an den Autor ;)). Wenn ich eine Funktionfür geshi schreibe und das mit preg_replace() mit BBCode ersetzen will, bekomme ich folgende Ausgabe: http://www.pichost.de/p/180508-165b.png

Das bedeutet es werden alle $ (Dollar) Zeichen nicht richtig gehighlightet. Nun mein Folgener BBCode:

PHP:
function ___bbcode($string) {
    $bbcode = preg_replace('/\[hl=([^]]+)\](.*?)\[\/hl\]/ies','___highlighting("\1","\2")',$bbcode);
  return $bbcode;
}


Hier die Funktion mit der ich highlighte (Geshi):
PHP:
function ___highlighting($string, $language = 'text') {
    include_once dirname(__FILE__).'/class.geshi.php';
    
    # Geshi Klasse laden
    $geshi = new geshi($string, $language);

    $geshi->enable_keyword_links(true);
    $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS, 10);

    for ($lines_extra = 1; $lines_extra < 5000; $lines_extra ++) {
       $geshi->highlight_lines_extra(array($lines_extra ++));
    }
    
    return '<blockquote><u>'.$language.' Codeschnipsel</u>:<hr />'.$geshi->parse_code().'</blockquote>';
}


Ich denke eher, das ich ein problem mit den Filtern und dem Eintragen in der Datenbank habe. Hier mal der Code, wie ich den Normalen Text eines Benutzers und den Code speichere:

PHP:
$db->sql_query('INSERT INTO `FORUM_POST` SET `POST_DATE` = UNIX_TIMESTAMP(),`POST_CHANGE` = "0",
                                                    `POST_BBCODE` = "'.mysql_real_escape_string($_POST['BBCODE']).'",
                                                    `POST_SMILIE` = "'.mysql_real_escape_string($_POST['SMILIE']).'",
                                                    `THREAD_ID` = "'.mysql_real_escape_string($_GET['tid']).'",
                                                    `POST_DNS` = "'.mysql_real_escape_string($_SERVER['REMOTE_ADDR']).'",
                                                    `POST_AUTOR` = "'.mysql_real_escape_string($_SESSION['USER_USERNAME']).'",
                                                    `POST_TEXT` = "'.mysql_real_escape_string($_POST['TEXT']).'"');

Was mache ich falsch? Ich möchte doch nur [hl=SCRIPTSPRACHE]CODE[/hl]. Kann mir einer sagen was hier nicht korrekt ist oder was hier noch gemacht werden muss, damit alles stimmt?
 
Ok hier ein Beispiel:

Code:
-> wird zu -&gt;
Du hast anch der umwandlung wahrscheinlich noch eine 2te Parse Klasse.. dann wird daraus:


Code:
-&gt; wird zu &amp;gt;

mfg
 
Jagst du deinen Input string bevor du ihn an Smarty übergibst durch htmlentities oder dergleichen? Sehr wahrscheinlich sogar da du ja sicherlich HTML Verbieten willst.
Wende bevor du den String highlightest html_entity_decode an. Und dafür htmlentities muss natürlich demzufolge vor dem Highlightning erfolgen da Geshi die htmlentities selbst erzeugt. Sonst würden diese doppelt generiert. So würde aus & zuerst &amp; und danach zu &amp;amp;
PHP:
function ___highlighting($string, $language = 'text') {
    include_once dirname(__FILE__).'/class.geshi.php';
    # HTML Zeichen zurückwandeln
    $string = html_entity_decode($string);
    # Geshi Klasse laden
    $geshi = new geshi($string, $language);

    $geshi->enable_keyword_links(true);
    $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS, 10);

    for ($lines_extra = 1; $lines_extra < 5000; $lines_extra ++) {
       $geshi->highlight_lines_extra(array($lines_extra ++));
    }
    
    return '<blockquote><u>'.$language.' Codeschnipsel</u>:<hr />'.$geshi->parse_code().'</blockquote>';
}
 
Danke für die Super Antworten. Nein, es hat sich nichts berändert. Ich sage ja, ich habe auch keine Ahung was sich da abspielt. Ich mache es auch sonst wie immer und hatte nie Probleme, nur jetzt bekomme ich Kopfschmerzen :(
 
Hat den keiner ein Vorschlag? Hab alles hinbekommen, nur das wenn ich PHP Code poste, werden die $ zeichen nicht angezeigt, bzw. ich habe als code:

Code:
$string = 'Hallo String';

// angezeigt wird aber so:
 = 'Hallo String';

Woran liegt das?
 
Zurück