tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
17
ZUGRIFFE
1147
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    lukelukeluke lukelukeluke ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    171
    Hi zusammen.
    Ich habe eine Funktion, welche wie in einem Forum einen angegebenen Tag ersetzt. In meinem Beispiel ist das {code} und {/code}.
    Hier die Funktion:
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    function makecode($makeacode) {
    // TABLE VOR CODE
    $tablevor = "<table bgcolor=\"#CCCCCC\"><tr><td>";
    // TABLE NACH CODE:
    $tablenach = "</td></tr></table>";
    $makeacode = preg_replace("/\{code\}(.*?)\{\/code\}/si",$tablevor."\\1".$tablenach,$makeacode);
    return $makeacode; }
    Ich verwende das, um in Einträgen den Sourcecode speziell zu markieren.
    Nun würde ich auch noch gerne, falls jemand dieses "{code}sourcecode{/code}" verwendet, den sourcecode zwischen den code tags speziell formatieren. Das heisst, das ich beispielsweise verschiedene Wörter wie "class" oder "public" blau einfärben möchte.
    Oder sobald in einer Zeile "//" vorkommt, soll ab dann hellgrau angezeigt werden.
    Ich weiss jedoch nicht wie ich den Zugriff auf NUR das machen kann, was sich zwischen den {code} tags befindet. Kann man das irgendwie mit dem "\\1"?

    Vielen Dank für eure Hilfe!

    Gruss, Lukas
     

  2. #2
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hi

    hast Du Dich mal mit dem highlight_string beschäftigt?
    http://de.php.net/highlight_string
     
    liebe Grüße, die Luzie

  3. #3
    lukelukeluke lukelukeluke ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    171
    Zitat Zitat von Luzie
    Hi
    hast Du Dich mal mit dem highlight_string beschäftigt?
    http://de.php.net/highlight_string
    Hi Luzie,
    Danke für deine Antwort.
    highlight_string - ist etwa das gleiche was man auch mit preg_replace machen kann denke ich.
    Was ich suche, ist eine Möglichkeit, nur Wörter zu highlighten, die innerhalb meiner {code} {/code} tags sind....
     

  4. #4
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hi

    das macht es doch auch. In u.g. Beispiel alles, was sich zwischen [ php ] und [ /php ] befindet. Die Farben kann man glaube ich auch in der php.ini ändern, hab ich aber noch nicht probiert.

    Du kannst das RegExp hier

    $match = array('#\[php\](.*?)\[\/php\]#se');

    ja auch durch Deine Zeichen austauschen. Du musst das natürlich austesten, inwiefern die Klammern escapted werden müssen.

    PHP-Code:
    <?php
    function bbcode($s)
    {
       
    $s str_replace("]\n""]"$s);
       
    $match = array('#\[php\](.*?)\[\/php\]#se');
       
    $replace = array("'<div>'.highlight_string(stripslashes('$1'), true).'</div>'");
       return 
    preg_replace($match$replace$s);
    }
    ?>
    Und so wie hier werden dann die Farben dargestellt.
    Geändert von Luzie (22.03.05 um 19:00 Uhr)
     
    liebe Grüße, die Luzie

  5. #5
    lukelukeluke lukelukeluke ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    171
    Ich kann dir leider nicht ganz folgen...
    Hast du meine Idee sicher verstanden? Hier nochmal was ich will:
    Ich habe eine grosse Variable mit viel text drin.
    In dieser befindet sich ein kleines textstück, welches {code} {/code} darum hat. Dieses wird dann mit meiner Funktion mit ienem grauen table hinterlegt...

    In diesem Textstück wiederum, also in dem welches mit {code} {/code}umrahmt ist, befinden sich spezielle wörter die ich in einem array definiere, welche zB blau sein sollen. Das soll aber nur für den Text geschehen, welcher innerhalb von {code} {/code}ist. Der restliche Text soll davon nicht betroffen sein....
     

  6. #6
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hi

    doch doch, ich verstehe, was Du meinst.
    Du wirst Dir eine Funktion bauen müssen, wo Du eine Variable nach bestimmten Zeichenmustern (Patternmuster oder RegExp) durchsuchst. Wie die Wörter eben aussehen müssen bzw. welche Merkmale sie haben. Ich bin aber ein ziemliche Regexp-Krücke, auf diesem Weg musst Du selbst ran. http://www.regenechsen.de/regex_de/regex_1_de.html
    In dieser Funktion wirst Du diese Muster dann mit der entsprechende Farbe ersetzen müssen.

    Später baust Du dann diese Funktion einfach vor das Ersatz-Element (Platzhalter) \\1 oder $1. (fett), je nach Aufbau des Scriptcodes. Die muss natürlich dann auch den vor Dir vergebenen Namen haben.

    In diesem Beispiel sieht man das ganz deutlich, wie die Funktion davorgebaut ist.
    $replace = array("'<div>'.MeineFunktion(stripslashes('$1'), true).'</div>'");

    oder

    $makeacode = preg_replace("/\{code\}(.*?)\{\/code\}/si",$tablevor.meineFunktion("\\1").$tablenach,$makeacode);
    return $makeacode; }

    BTW: die Funktion highlight_string() ist eine phpeigene Funktion, die bestimmten Mustern im php-Scriptcode die entspr. Farbe gibt.
    Geändert von Luzie (22.03.05 um 20:36 Uhr)
     
    liebe Grüße, die Luzie

  7. #7
    lukelukeluke lukelukeluke ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    171
    hm ich bin immernoch davon überzeugt, dass ich das alles gar nicht brauche
    ich habe folgende funktionen:
    Code :
    1
    2
    3
    
    function highlight($makehighlight) {
    $makehighlight = str_replace ("public","<font color=blue>puuubliic</font>",$makehighlight);
    return $makehighlight; }
    Code :
    1
    2
    3
    4
    5
    
    function makecode($makeacode) {
    $tablevor = "</font><br><div align=\"center\"><table width=\"550\" border=\"1\" bordercolor=\"#666666\" style=\"border: 1px;\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"whitesmoke\"><tr><td bgcolor=\"#666666\"><div align=\"center\"><font class=\"home-text\" color=\"white\"><b>CODE</b></font></div></td></tr><tr><td><div class=\"home-text\" align=\"left\">";
    $tablenach = "</div></td></tr></table></div><font class=\"home-text\">";
    $makeacode = preg_replace("/\[code\](.*?)\[\/code\]/si",$tablevor.highlight('\\1').$tablenach,$makeacode);
    return $makeacode; }
    mit der einten suche code begin und end tags, und mache dann das table darum.
    Mit der anderen, welche in dieser verwendet wird, sollte das Wort "public" ersetzt werden, aber nur innerhalb dieser code tags.
    Also folgender String:
    $str = "public ist cool [C0DE]ich finde auch das public cool ist[/C0DE]";
    sollte folgendes ausgeben (echo makecode($str):
    public ist cool <codetable begin>ich finde auch das <font color=blue>public</font> cool ist <codetable end>
    Das einzige was nicht funktioniert ist das:
    preg_replace("/\[code\](.*?)\[\/code\]/si",$tablevor.highlight('\\1').$tablenach,$makeacode);
    Ich suche einen weg auf das zuzugreiffen, was sich innerhalb der code tags befindet, und dies dann mit der funktion highlight() zu verändern.
    Noch eine Idee? Vielen Dank!
    Gruss, Lukas
     

  8. #8
    Avatar von Nils Hitze
    Nils Hitze Nils Hitze ist offline Admin a.D.
    Registriert seit
    Sep 2000
    Ort
    Dachau
    Beiträge
    2.201
    Blog-Einträge
    104
    Häng mal an deinen regex hinter "si" noch "e" sonst wird das mit dem highlight nichts.
    Und vor $tablevor und nach $tablenach noch ein "

    Einfach mal probieren.
     

  9. #9
    lukelukeluke lukelukeluke ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    171
    so?:
    $makeacode = preg_replace("/\[code\](.*?)\[\/code\]/sie","$tablevor.highlight('\\1').$tablenach",$makeacode);

    jetzt funktioniert gar nichts mehr bzw. es gibt einen Fehler:

    Parse error: parse error, unexpected '<' in /header.php(80) : regexp code on line 1
    Fatal error: Failed evaluating code:
    /home/www/web728/html/lookass/src/include/header.php on line 80

    EDIT:
    btw. wenn ich nur die "" einsetze, vor $tablevor und nach $tablenach, dann wird die Funktion highlight() angezeigt, also auf der Seite kann ich dann sehen highlight( hier mein text );. Ohne "" wird sie nicht angezeigt. Das müsste doch heissen sie wird ausgeführt... jedoch passiert nichts. Wenn ich sie direkt um alles mache funktioniert sie. Also an der Funktion liegt es nicht...
    Geändert von lukelukeluke (23.03.05 um 09:17 Uhr)
     

  10. #10
    Avatar von Nils Hitze
    Nils Hitze Nils Hitze ist offline Admin a.D.
    Registriert seit
    Sep 2000
    Ort
    Dachau
    Beiträge
    2.201
    Blog-Einträge
    104
    preg_replace(regex, "'DAVOR'.highlight_string(\\1,true).'DANACH'",text)

    Probier's mal so .. also mit " ' ".$tabledavor" ' . highlight(\\1,true) . ' '"
     

  11. #11
    lukelukeluke lukelukeluke ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    171
    hi Nils,
    Funktioniert leider nicht
    Also es gibt keinen Fehler, aber das highlight_string wird auch auf der Seite angezeigt anstatt ausgeführt.
    Gibt es keine Lösung das "\\1" in eine Variable zu kriegen?
     

  12. #12
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Hallo

    Du könntest es evtl. auch in die erste Funktion einfügen

    PHP-Code:
    function highlight($makehighlight) {
    $tablevor "</font><br><div align=\"center\"><table width=\"550\" border=\"1\" bordercolor=\"#666666\" style=\"border: 1px;\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"whitesmoke\"><tr><td bgcolor=\"#666666\"><div align=\"center\"><font class=\"home-text\" color=\"white\"><b>CODE</b></font></div></td></tr><tr><td><div class=\"home-text\" align=\"left\">";
     
    $tablenach "</div></td></tr></table></div><font class=\"home-text\">";

    $makehighlight str_replace ("public","<font color=blue>puuubliic</font>",$makehighlight);
    return 
    $tablevor.$makehighlight.$tablenach; } 
    und bei der 2. Funktion weglassen.
     
    liebe Grüße, die Luzie

  13. #13
    lukelukeluke lukelukeluke ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    171
    nein geht nicht weil:
    1. Ich will nicht überall highlighten, nur innerhalb der code tags
    2. so habe ich gar keine abfrage wo die code tags sind...
     

  14. #14
    Registriert seit
    Aug 2003
    Ort
    Arnsberg, Germany, Germany
    Beiträge
    1.066
    Aber Du rufst die Funktion doch nur innerhalb der Code-Tags auf, order irre ich mich ?
     
    liebe Grüße, die Luzie

  15. #15
    lukelukeluke lukelukeluke ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    171
    Wie ich die funktion nur innerhalb der Codetags aufrufen soll ist ja mein Problem!
    Eine Highlight-Funktion zu schreiben ist kein Problem, nur wie ich sie auf den Bereich innerhalb der CodeTags anwenden kann...
     

Ähnliche Themen

  1. XML Sonderzeichen in einem String ersetzen
    Von Michael0501 im Forum Java
    Antworten: 4
    Letzter Beitrag: 30.12.09, 14:58
  2. Antworten: 3
    Letzter Beitrag: 17.01.07, 09:54
  3. Antworten: 7
    Letzter Beitrag: 18.12.05, 14:35
  4. " in einem String ersetzen
    Von jensner im Forum PHP
    Antworten: 4
    Letzter Beitrag: 17.05.05, 18:27
  5. Variablen in einem String ersetzen.
    Von Nitromaus im Forum PHP
    Antworten: 5
    Letzter Beitrag: 24.07.02, 08:41