Problem mit preg_replace()
lima-city → Forum → Sonstiges → Spam und sonstiges Unvergütetes
angezeigt beitrag
beitrag
bild
deswegen
email
funktion
gen
inhalt
letzte parameter
mache
manual
muster
parameter
quelltext
result
second parameter
set
tag
variable
wenigsten
-
Und zwar habe ich foltag/gen">gendes Problem. Ich habe ein BBCode-System und nun m?chte ich nat?rlich auch Syntaxhighlighting machen.
$muster[] = "/\[php\](.*?)\[\/php\]/Usi"; $ersetzen[] = '<div>'.highlight_string( ).'</div>';
So soll es quasi aussehen, aber ich muss nat?rlich der Funktion noch nen Parameter ?bergeben und der soll nat?rlich der text zwischen dem [php][/ php] sein. Alles was ich bisher versucht habe hat nicht funktioniert... :( -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Es liegt wahrscheinlich daran, dass Du den Slash, sowie die eckigen Klammern, nicht escaped hast.
Du kannst es folgendermassen versuchen:
<? $muster[] = "/\[php\](.*?)\[\/php\]/Usi"; $ersetzen[] = '<div>'.highlight_string( ).'</div>'; ?>
//edit: Die Escape-Zeichen werden aus irgendeinem Grund nicht angezeigt.
Beitrag ge?ndert am 1.10.2005 15:16 von compactdisc -
Ja genau die werden nicht angezeigt...ich habe sie ja auch escaped, aber mein Problem ist ja wie ich bei highlight_string() die Variable reinmache.
So geht es auf jeden Fall nicht...
$muster[] = "/\[php\](.*?)\[\/php\]/Usi";
$ersetzen[] = '<div>'.highlight_string('\1').'</div>';
edit: So werden sie ja auch nicht angezeigt... -.-
Beitrag ge?ndert am 1.10.2005 15:28 von i-spacke -
<? $text = "Hallo [php]Test[/php] m?????ep![php]muuh![/php]fjksjfsdfs"; $muster = "/\[php\](.*)\[\/php\]/Usi"; $text = preg_replace($muster, "<div style='border:1px solid black;'>highlight_string(\$1)</div>", $text); print($text); ?>
So w?rde es funktionieren. Allerdings wird das "highlight_string" nicht ausgef?hrt ...
-
..Es soll ja ausgef?hrt werden. Wie wird das denn zum Beispiel hier bei Lima gemacht????
-
-.- Einer wird doch wohl noch die Antwort wissen, oder etwa nicht?
-
*schieb*
-
*schub*
-
Hier:
<? $neu = preg_replace("/\[php\](.*)\[\/php\]/Usie", 'highlight_string("$1")', $text, 2); ?>
Gibt ein merkw?rdiges Ergebnis zur?ck -
Na toll! Bringt mir ja nun reichlich wenig. Wie wird denn dieses shice highlighting sonst ?berall gemacht???
-
kA, gibt's dazu keinen anderen Weg?
-
$muster[] = "/\[php\](.*?)\[\/php\]/ies";
$ersetzen[] = "phpcode('\\1')";
Hmm so funktioniert es jetzt wenigstens mit der variable. Also ich ?bergebe das ganze an eine Funktion in der dann der Text gehighlightet wird, aber irgendwie habe ich das Problem, dass da dann lauter HTML-Befehle stehen... -
Zeig mal den Code!
-
Wunder dich nicht, denn es ist ein bissl chaotisch und ich werde es auch noch anders l?sen.
function phpcode($code) {
$html = highlight_string($code, true);
$html = str_replace("\n", "", $html);
$rows = explode("<br />", $html);
$row_num = array();
$ii = array();
$i = 1;
foreach($rows as $row) {
if($i < 10) {
$i = "0".$i;
}
$temprow = "$row\n";
$temprow = ereg_replace(
"([a-z,_]+) *</font><font color=\"#007700\">\(",
"<a href=\"http://www.php.net/\\1\" target=\"blank\">\\1</a></font><font color=\"#007700\">(",
$temprow);
$row_num[]=ereg_replace(
"function </font><font color=\"#0000BB\"><a href=\"http://www.php.net/([a-z,_]+)\" target=\"blank\">([a-z]+)</a>"
,"function </font><font color=\"#0000BB\">\\1",
$temprow);
$ii[]=$i;
$i++;
}
$iii=($i-1)*11;
return "<div>"
."<table style=\"border:0px #000000 solid\" cellspacing=0 cellpadding=0 height=1><tr>"
."<td width=\"40\" valign=\"bottom\" align=\"left\"></td><td width=\"*\" valign=\"top\" align=\"left\">"
."<pre>".implode($row_num)."\n </pre></td></tr></table></div>"
.'<div style="position:absolute; left:0px;top:0px; width:20px;z-index:1; border-right:1px solid black;">'
.'<table style="border:0px #000000 solid" cellspacing=0 cellpadding=0 height=1><tr>'
.'<td width="*" valign="top" align="left"><pre>'.implode("\n",$ii).'</pre> </td></tr></table></div>';
}
function text($text) {
if (is_array ($text)) { // Pr?fen, ob der Parameter ein Array ist
foreach ($text as $key => $value) { // wenn ja, Wert und Inhalt auslesen und diese Funktion mit dem Inhalt als Parameter wieder aufrufen
$bbcode[$key] = text($value);
}
} else { // wenn der ?bergebene Parameter kein Array ist
$text = stripslashes($text); // ?berfl?ssige Backslahes entfernen
$text = htmlentities($text); //HTML-Code entfernen
$text = nl2br ($text); //Zeilenumbruecheumwandeln
$muster = array ();
$ersetzten = array ();
$muster[] = "/\[br\]/Usi";
$ersetzen[] = '<br />';
$muster[] = "/\[hr\]/Usi";
$ersetzen[] = '<hr />';
$muster[] = "/\[b\](.*)\[\/b\]/Usi";
$ersetzen[] = '<b>\1</b>';
$muster[] = "/\[u\](.*)\[\/u\]/Usi";
$ersetzen[] = '<u>\1</u>';
$muster[] = "/\[i\](.*)\[\/i\]/Usi";
$ersetzen[] = '<i>\1</i>';
$muster[] = "/\[h1\](.*)\[\/h1\]/Usi";
$ersetzen[] = '<h1>\1</h1>';
$muster[] = "/\[h2\](.*)\[\/h2\]/Usi";
$ersetzen[] = '<h2>\1</h2>';
$muster[] = "/\[h3\](.*)\[\/h3\]/Usi";
$ersetzen[] = '<h3>\1</h3>';
$muster[] = "/\[h4\](.*)\[\/h4\]/Usi";
$ersetzen[] = '<h4>\1</h4>';
$muster[] = "/\[h5\](.*)\[\/h5\]/Usi";
$ersetzen[] = '<h5>\1</h5>';
$muster[] = "/\[h6\](.*)\[\/h6\]/Usi";
$ersetzen[] = '<h6>\1</h6>';
$muster[] = "/\[quote\](.*)\[\/quote\]/Usi";
$ersetzen[] = '<div class="quote">Zitat: <br \>\1</div>';
$muster[] = "/\[li\](.*)\[\/li\]/Usi";
$ersetzen[] = '<li>\1</li>';
$muster[] = "/\[ul\](.*)\[\/ul\]/Usi";
$ersetzen[] = '<ul>\1</ul>';
$muster[] = "/\[php\](.*?)\[\/php\]/ies";
$ersetzen[] = "phpcode('\\1')";
$muster[] = "/\[code\](.*)\[\/code\]/Usi";
$ersetzen[] = '<blockquote><div class="pre">Code:<br>\1<hr noshade></div></blockquote>';
$muster[] = "/\[pre\](.*)\[\/pre\]/Usi";
$ersetzen[] = '<div class="pre">\1</div>';
//SMILIES
$sql = "SELECT code,name FROM smilies";
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result))
{
$muster[] = "/".addcslashes(addcslashes($row['code'], "("), ")" )."/i";
$ersetzen[] = "<img src=\"images/smilies/".$row["name"].".gif\" />";
}
$text = preg_replace ($muster, $ersetzen, $text);
//Aus http://url wird [URL]http://url[/URL]
$urlsuch[]="/([^]_a-z0-9-=\"'\/])((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";
$urlsuch[]="/^((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";
$urlreplace[]="\\1[URL]\\2\\4[/URL]";
$urlreplace[]="[URL]\\1\\3[/URL]";
//Aus klaus@mustermann.de wird [EMAIL]klaus@mustermann.de [/EMAIL]
$emailsuch[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
$emailsuch[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
$emailreplace[]="\\1[EMAIL]\\2[/EMAIL]";
$emailreplace[]="[EMAIL]\\0[/EMAIL]";
$text = preg_replace($urlsuch, $urlreplace, $text);
if (strpos($text, "@"))
{
$text = preg_replace($emailsuch, $emailreplace, $text);
}
//Die URL's werden zu Links
$text = preg_replace("/\[URL\]www.(.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">www.\\1</a>", $text);
$text = preg_replace("/\[URL\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);
$text = preg_replace("/\[URL=www.(.*?)\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">\\2</a>", $text);
$text = preg_replace("/\[URL=(.*?)\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\2</a>", $text);
//E-Mail Adressen werden zu links
$text = preg_replace("/\[EMAIL\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\1", $text);
$text = preg_replace("/\[EMAIL=(.*?)\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\2</a>", $text);
//bild.jpg wird als Bild angezeigt
$text = preg_replace("/\[IMG\](.*?)\[\/IMG\]/si", "<img src=\"\\1\" border=\"0\">", $text);
}
return $text; // das ganze zur?ckgeben
}
Au?erdem bin ich jetzt weg und komm erst in 2,5 Stunden wieder... ;D
EDIT: Mit [ code ] geht es nicht.... -.- deswegen habe ich es so gemacht.
Beitrag ge?ndert am 1.10.2005 21:25 von i-spacke -
Wie gew?hnlich, ignoriere ich solche Quelltextmengen und versuche einfach mal zu vermuten, was du erreichen willst:
Geht es dir darum, den Quelltext einzuf?rben und dann in einer Variablen zu speichern?
Dann machst du das so:
$alter_quelltext = '.....';
$bunter_quelltext = highlightstring($alter_quelltext, TRUE);
Jetzt hast du in der Variablen $bunter_quelltext den "gehighlighteten" PHP-Quelltext. Der zus?tzliche Parameter TRUE (oder 1) ist auf der deutschsprachigen Seite des PHP-Manuals immer noch nicht aufgef?hrt. Er funktioniert aber.
Und wenn du den Quelltext zwischen die <pre></pre>-Tags packst, dann solltest du nl2br() weglassen, sonst sehen die Quelltexte dann aus wie hier im Lima-Forum.
MfG
alopex -
Was bewirkt der letzte Parameter?
-
Naja, wenigstens funktioniert's jetzt:
http://compactdisc.pyrokar.lima-city.de/highlight_string.txt
und
http://compactdisc.pyrokar.lima-city.de/highlight_string.php -
Was bewirkt der letzte Parameter?
Er bewirkt, dass highlight_string() nicht in den Ausgabepuffer sondern in eine Variable schreibt. So ?hnlich wie bei print_r("blubb", 1). Leider schweigt sich das deutsche PHP-Manual immer noch dazu aus.
Auf der englischen Seite steht es aber erkl?rt:
http://de.php.net/manual/en/function.highlight-string.php
If the second parameter return is set to TRUE then highlight_string() will return the highlighted code as a string instead of printing it out.
If the second parameter is not set to TRUE then highlight_string() will return TRUE on success, FALSE on failure.
MfG
alopex -
Es ging mir eigentlich darum, dass ich nicht genau wusste wie ich es anstellen kann das ich quasi in preg_replace die funktion aufrufe und den zu ersetzenden text als Parameter ?bergebe.
$muster[] = "/[php](.*?)[/php]/ies";
$ersetzen[] = "highlightstring('\1', TRUE)";
Geht es so? Hab leider grad keine Zeit um es auszuprobieren. -
Wenn schon, dann so:
$muster[] = '/[php](.*?)[/php]/ies';
$ersetzen[] = 'highlightstring($1, TRUE)';
Wenn du die beiden Array-Eintr?ge sp?ter mit preg_replace() verarbeiten willst. W?rde ich mal so sagen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage