eregi_replace mit 3 "Variablen"

häng an den pattern noch nen 'e' dran und der rest stimmt :p *ggggggg*

preg_replace("/\[php\](.*)\[\/php\]/se" , "highlight_string(\\1)",$string);
 
hmmm da kommt diese fehlermeldung :(

Parse error: parse error, unexpected '<', expecting ')' in /home/www/web1/html/news/shownews.php(191) : regexp code on line 1




so steht der zu parsende code in der datenbank:

PHP:
Test;
echo "uuuuu";

aber irgendwie glaub ich muss ich diese parse-funktion anders lösen, denn der macht mir bei echo "uuuu" auch so \ rein vor den " weis nich ob ich da diese funktion gegen diese \ nutzen kann wenn ich schon die highlightin_string funktion nutze :/
 
ganz klar warum das net :

"highlight_string(\\1)",$string);

ersetz mal durch das hier:

"highlight_string(\"\\1\")",$string);

dann dürfte es klappen. zu den Backslashes vor den Anführungszeichen: die, die zuviel sind kannst du danach mit strip_slashes entfernen.
 
hmm da kommt ein anderer "fehler" scheinbar wird der wert dann nicht in die variable übergeben sondern sofort ausgegeben und an der stelle wo's erscheinen sollte steht ne 1. und auch gehighlighted wird es nicht :(
 
Zuletzt bearbeitet:
Die Funktion highlight_string gibt das Zeug direkt aus und gibt es nicht per return zurück.
Lösen kannst du das mit einem Output-Buffering (das sind die Funktionen, die mit ob_ anfangen). Wie genau du das machen musst, weiss ich nicht auswendig, aber ungefä so:
PHP:
ob_start();
highlight_string($str2highlight);
$ergebnis = ob_get_contents();
ob_end_clean();

return $ergebnis();

Damit der Code gehighlightet wird, muss er zwischen PHP-Tags stehen (also z.B. <? oder <?php).
Ob es mit den ASP-Tags (<%) und den <script>-Tags auch geht, sollte es aber.


der stelle wo's erscheinen sollte steht ne 1
Klar, das ist der Rückgabewert von highlight_string (true).
 
wenn ich das so mache :
ob_start();
highlight_string($str2highlight);
$ergebnis = ob_get_contents();
ob_end_clean();

return $ergebnis();


wie schaffe ich es dann, dass er mir auch nur das zwischen den beiden Code-tags das ganze highlighted? :)
 
ich hab das nun so probiert, da es so angeblich gehen soll, jedoch kommt dann diese Fehlermeldung: "Fatal error: Cannot redeclare php_string() (previously declared in ......"



PHP:
function php_string($intro)
{
  $intro = stripslashes($intro);

  ob_start();
  highlight_string($intro);
  $intro = ob_get_contents();
  ob_end_clean();

  return $intro;
}



  $intro = preg_replace("/\[ php ](.*)\[\ /php \]/esiU", "php_string('$1')", $intro);

btw. soll genau das erreicht werden was nun mit diesem PHP-Code gemacht wurde :)
 
Es ist richtig, nur gibt es schon, was die Fehlermeldung ja auch aussagt, eine Funktion namens php_string.
Benutze also einen anderen Namen für die Funktion wie z.B. myhighlight oder wie auch immer.


//Edit: ach ja, und dafür, dass alles gehightlightet wird:
PHP:
//ganz an den Anfang der Funktion:
if (!strpos($intro, "<?")) {
     $intro = "<?php".$intro."?>";
     $on = true;
}

//und ans Ende (vor return versteht sich)
if (isset($on)) {
    $intro = str_replace("&lt;?php", "", $intro);
    $intro = str_replace("?&gt;", "", $intro);
}
 
Zuletzt bearbeitet von einem Moderator:
war jetzt 3 tage im kurzurlaub, leider gehts auch nicht wenn ich die funktion vom namen her ändere :(

habs mal mit

PHP:
function hilight($intro)
{
  $intro = stripslashes($intro);

  ob_start();
  highlight_string($intro);
  $intro = ob_get_contents();
  ob_end_clean();

  return $intro;
}



  $intro = preg_replace("/\[ php ](.*)\[\ /php \]/esiU", "hilight('$1')", $intro);
probiert
 
Zurück