ERLEDIGT
NEIN
NEIN
ANTWORTEN
17
17
ZUGRIFFE
1147
1147
EMPFEHLEN
-
22.03.05 12:17 #1
- 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:
Ich verwende das, um in Einträgen den Sourcecode speziell zu markieren.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; }
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
-
Hi
hast Du Dich mal mit dem highlight_string beschäftigt?
http://de.php.net/highlight_stringliebe Grüße, die Luzie
-
22.03.05 18:07 #3
- Registriert seit
- Sep 2004
- Beiträge
- 171
Hi Luzie,
Zitat von 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....
-
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.
Und so wie hier werden dann die Farben dargestellt.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);
}
?>Geändert von Luzie (22.03.05 um 19:00 Uhr)
liebe Grüße, die Luzie
-
22.03.05 19:03 #5
- 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....
-
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
-
23.03.05 08:12 #7
- 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; }mit der einten suche code begin und end tags, und mache dann das table darum.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 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
-
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.
-
23.03.05 09:05 #9
- 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)
-
preg_replace(regex, "'DAVOR'.highlight_string(\\1,true).'DANACH'",text)
Probier's mal so .. also mit " ' ".$tabledavor" ' . highlight(\\1,true) . ' '"
-
23.03.05 10:01 #11
- 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?
-
Hallo
Du könntest es evtl. auch in die erste Funktion einfügen
und bei der 2. Funktion weglassen.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; }
liebe Grüße, die Luzie
-
23.03.05 10:47 #13
- 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...
-
Aber Du rufst die Funktion doch nur innerhalb der Code-Tags auf, order irre ich mich ?
liebe Grüße, die Luzie
-
23.03.05 11:20 #15
- 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
-
XML Sonderzeichen in einem String ersetzen
Von Michael0501 im Forum JavaAntworten: 4Letzter Beitrag: 30.12.09, 14:58 -
suchen und ersetzten mit preg_replace - HILFE
Von jarkand im Forum PHPAntworten: 3Letzter Beitrag: 17.01.07, 09:54 -
preg_replace Text durch Variableninhalt ersetzten
Von max im Forum PHPAntworten: 7Letzter Beitrag: 18.12.05, 14:35 -
" in einem String ersetzen
Von jensner im Forum PHPAntworten: 4Letzter Beitrag: 17.05.05, 18:27 -
Variablen in einem String ersetzen.
Von Nitromaus im Forum PHPAntworten: 5Letzter Beitrag: 24.07.02, 08:41





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren