Function in preg_replace aufrufen
Andavos
- php
Hallo,
also ich möchte innerhalb preg_replace() die function "php_code" aufrufen.
Hintergrund:
Also der User soll die Chance bekommen, PHP-Code einfärben zu lassen. Also schreibt er seinen PHP Code zwischen [php] und [/php]
Den Text dazwischen fräbt er dann ein.
Das Problem: Wie bekomme ich es hin, das der Text dazwischen "extrahiert" wird, bearbeitet wird und dann farbig wieder eingefügt wird?
Das problem ist ja, das es mehrere Schritte sind (Zeilen zählen, einfärgen etc.) damit man es wieder ausgeben kann.
Dafür habe ich die Schirtte alle in der function: php_code
Dann ist in der function: bb_code folgendes:
$text = preg_replace("/[PHP](.*?)[/PHP]/si", php_code("$1"), $text);
Bin auch über alle anderen Vorschläge froh, wie ich den/die Text/e (wichtig!) zwischen [php]...[/php] "rausbekomme", damit ich nur den Text bearbeiten kann, der rest des Beitrages soll nicht bearbeitet werden.
Man kan nauch ruhig andere Techniken testen/vorschlagen, hauptsache sie gehen.
Wenn ich anstatt $1 nur <?php echo 'hi'; ?> schreibe, funktioniert die Ausgabe, allerdings nicht wenn ich $1 oder \1 schreibe.
MFG
Andavos
Huhu Andavos
also ich möchte innerhalb preg_replace() die function "php_code" aufrufen.
Dafür gibt es die Funktion preg_replace_callback()
http://de.php.net/manual/en/function.preg-replace-callback.php
Viele Grüße
lulu
Hallo,
Hmm hab damit irgendwie Probleme:
Also ich habe:
[php]<?php
echo 'hi';
?>[/php]
Das soll er hiermit ersetzen:
$text = preg_replace_callback("/[PHP](.*?)[/PHP]/si", "php_code", $text);
function php_code($text)
{
...
return $php_code;
}
Ausgabe:
Array
Jemand eine Idee woran das liegt?
MFG
Andavos
Huhu
Jemand eine Idee woran das liegt?
Schau Dir die Beschreibung im Manual nochmal _genau_ an.
Beachte auch die Beipspiel bei den user comments.
Viele Grüße
lulu
Hi,
Jemand eine Idee woran das liegt?
nein - leider nicht. Ich habe aber noch einen anderen Vorschlag: ich würde bei preg_replace den Parameter /e benutzen, der den ersetzenden Code ausführt, also in etwa so:
$text = preg_replace("/[PHP](.*?)[/PHP]/sie", "highlight_string(stripslashes('\1'), true)", $text);
Statt highlight_string() kannst du natürlich dann auch deine Funktion php_code() einsetzen.
Gruß,
Andreas.
Hallo,
danke es geht :) *freu*
Aber wie sieht es mit der Sicherheit aus? Benutze das für ein Board, und könnte jemand dadurch bösen Cpde ausführen?
Script:
$text = preg_replace("/[PHP](.*?)[/PHP]/sie", "php_codes("\1")", $text);
MFG
Andavos
Hallo,
hmm das geht auch nicht *heul*, denn da bekomm ich ganz andere Fehler.
Wenn der User z.B.
<?php
echo $hi;
?>
schreibt, versucht natürlich das $hi durch den Wert der Var $hi zu erstezen.
Diesen gibt es nicht, also bleibt dort stehen
<?php
echo ;
?>
MFG
Andavos
Hallo,
hmm gut jetzt weiß ich das es ein array ist :/
Allerdings wie kann ich das Array in einen String umwandeln? implode und foreach() haben nicht funktioniert :(
Und bei den Usercommand finde ich leider keine passende Antwort :(
Hast nicht evt. noch einen Tipp auf lager?
MFG
Andavos
Huhu Andavos
Und bei den Usercommand finde ich leider keine passende Antwort :(
ich schon ;-)
// as usual: $matches[0] is the complete match
// $matches[1] the match for the first subpattern
// enclosed in '(...)' and so on
Hast nicht evt. noch einen Tipp auf lager?
Also folgendes sollte als Callback-Funktion funktionieren:
function php_code($para)
{
$s = highlight_string($para[1], 1);
return $s;
}
Da funktioniert der Vorschlag von Andreas natürlich genauso gut.
Eine eigene Callback-Funktion ist hier also ggf. überflüssig.
Viele Grüße
lulu
Hallo lulu,
ah danke :)
Es geht.
So wie das Andreas gemacht hat, geht es nicht ganz, denn er versucht dann Variablen durch deren Werte zu ersetzen, also so:
<?php
echo $hi;
?>
wird zu
<?php
echo ;
?>
denn für $hi wurde kein Wert definiert.
Aber das mit callback geht
MFG
Andavos