tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1444
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    partykiller partykiller ist offline Mitglied
    Registriert seit
    Mar 2003
    Ort
    Flensburg
    Beiträge
    13
    Hi,
    ich habe folgendes Problem

    Ich möchte alles was zwischen [ code ] und [ /code ] steht mit highlight_string bearbeiten und das dann zwischen <div> und </div> ausgeben. Der Text der Nicht innerhalb von [ code ] und [ /code ] steht soll nicht mit highlight_string bearbeitet werden.

    Ich weiß das das mit Regulären Audrücken geht nur leider kapier ich das irgendwie nicht.

    Ich hoffe Ihr könnt mir irgendwie weiterhelfen.

    Danke im vorraus.


    PS: Es kann auch mehrmals einen Bereich mit [ code ] [ /code ] geben
     

  2. #2
    Registriert seit
    Nov 2002
    Ort
    Altdorf bei Nürnberg
    Beiträge
    3.027
    Zuerst musst du natürlich das Zeugs zwischen den code-Tags herausfiltern. Dann muss man das ganze highlighten. Funktionen ausführen geht bei den RegExp (Regular Expressions, Reguläre Ausdrücke) mit dem Schalter e:
    PHP-Code:
    $text preg_replace("/(\[code])(.*)(\[\/code\])/eisU""editphpcode('$2')"$text); 
    Nun brauchen wir noch die Funktion editphpcode(). Hier muss ein ob-Buffering erfolgen, weil die PHP-Funktion highlight_string den code direkt ausgibt:
    PHP-Code:
    function editphpcode($phpc) {
     
    $phpc str_replace("\\\"","\"",$phpc);
     
    $phpc html_entity_decode($phpc);
     
    $phpc trim($phpc);

     
    ob_start();
     
    $oldlevel=error_reporting(0);
     
    highlight_string($phpc);
     
    error_reporting($oldlevel);
     
    $buffer ob_get_contents();
     
    ob_end_clean();

     return 
    "<div>$buffer</div>";

    OK, ich gibs zu, der zweite Teil der editphpcode Funktion is ausm WBB geklaut
     

  3. #3
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Fast perfekt, Nuinmundo.

    Hier mal ein Aufruf mit einer korrekten Regexp (hat bei deinem Beitrag sicher wieder das Forum verhunzt):
    PHP-Code:
    $text preg_replace("/\\[code\\](.*)\\[\\/code\\]/eisU""editphpcode('$1')"$text); 
    Und dann wäre noch zu erwähnen, dass highlight_string den übergebenen String wie eine PHP-Datei behandelt. D.h., alle Bereiche, die nicht in <? ?> stehen, werden auch nicht wie PHP-Code eingefärbt. Damit auch Code ohne <? ?> korrekt gehighlighted wird, setzt man vor dem Aufruf von highlight_string ein <? an den Anfang und ein ?> an das Ende des Strings. Nach dem Highlighten entfernt man diese dann wieder. Hier mal eine erweiterte Funktion:
    PHP-Code:
    <?
    function editphpcode($phpc)
    {
        
    $phpc str_replace("\\\\\\"","\\"",$phpc);
        
    $phpc html_entity_decode($phpc);
        
    $phpc trim($phpc);

        
    $tag false;
        
    // Bei Bedarf PHP-Tag setzen...
        
    if (!strstr($phpc"<?") && !strstr($phpc"?>")) {
            
    $phpc "<?\n".$phpc."\n?>";
            
    $tag true;
        }
        
        
    ob_start();
        
    $oldlevel=error_reporting(0);
        
    highlight_string($phpc);
        
    error_reporting($oldlevel);
        
    $buffer ob_get_contents();
        
    ob_end_clean();

        
    // ...und wieder entfernen
        
    if ($tag) {
            
    $buffer str_replace("&lt;?"""$buffer);
            
    $buffer str_replace("?&gt;"""$buffer);
        }
        
        return 
    "<div>$buffer</div>";
    }
    ?>
    HTH

    // edit: Eine Ironie des Schicksals, dass man an dieser Funktion auch gleich das Manko selbiger sieht: Steht jetzt im übergebenen String zwar ein <? und ein ?> in "" oder '', nicht aber außerhalb eines Strings, so kann man durch ein einfaches strstr nicht mehr feststellen, ob man jetzt <? ?> setzen muss oder nicht.
    Geändert von Matthias Reitinger (22.04.03 um 12:52 Uhr)
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  4. #4
    Registriert seit
    Nov 2002
    Ort
    Altdorf bei Nürnberg
    Beiträge
    3.027
    Die RegExp hat das Board zerhauen. (Ich wiess nicht, benutzen die hier stripslashes?)


    Zu 2:
    Mit ereg(), oder preg_match()?
     

Ähnliche Themen

  1. Eclipse Include / Code Aufklappen ? Code unleserlich ?
    Von bziegenhagen im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 23.02.08, 12:03
  2. Antworten: 1
    Letzter Beitrag: 09.04.07, 18:44
  3. Antworten: 0
    Letzter Beitrag: 13.01.07, 20:42
  4. Antworten: 1
    Letzter Beitrag: 30.10.05, 13:29
  5. Antworten: 3
    Letzter Beitrag: 20.02.05, 20:58