Hallo. Schreibe grad ein Plugin für Wordpress.
Habe jedoch ein Problem mit einer Funktion und den darin enthalteten Regex:
So sieht meine Funktion aus:
[php]
function bbcode($content) {
$content = preg_replace(„[/p hp]!isU“,
highlight_string(„<?php $1 ?>“, TRUE),$content);
return $content;
}
[/php]
wenn ich die funktion nun wie folgt aufrufe:
[php]
$text = „Hallo, oder phpstyle: [p hp]<?php echo "Hello World" ?>[/p hp]“;
bbcode($text);
[/php]
Bekomme ich jedoch nur folgende Ausgabe:
[php]
<?php $1 ?>
[/php]
Ich musste in den Codes meine BBcodes trennen, da sonst der Parser ein wenig verrückt spielt.
Wie muss ich denn die Variable der Regex sonst aufrufen?
IUst ja auch kein Wunder. Du definierst eine Variable „<?php $1 ?>“, und mit dieser wird der Regex ausgetauscht. Das ganze sieht so warscheinlich auch logischer aus:
Das ganze kannst du verhindern, indemdu nur „$1“ reinschreibst.
btw: highlight_string() erwartet keinen zweiten Parameter, eigentlich müsste da ein Fehler ausgegeben worden sein. [phpnet]highlight_string[/phpnet]
Zudem ist das hier:
[noparse]$text = "Hallo, oder phpstyle: [php]<?php echo "Hello World" ?>[/php]";
bbcode($text);[/noparse] Auch schwachsinn. Was soll das <?php ?> dadrin?
Nun ja, das soll der PHP code sein, der gehighlightet werden soll. Er wird ja später vom User übergeben.
Wenn ich bei Highlight String nur $1 angebe, kommt folgender Fehler:
Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or ‚$‘ in /www/usersites/a-f/alti/pub/blog/wp-content/plugins/bbcode.php on line 15
Line 15:
highlight_string($1),$content);
Was ja auch logisch ist, da Variablen nicht mit Zahlen beginnen dürfen. Wenn ich die Var in Anführungszeichen schreibe, wird auch nur $1 ausgegeben.
Ich weiß nicht weiter.
Bin auf weitere Hilfen gespannt.
Du brauchst den Modifikator e. Ansonsten würde auch noch preg_replace_callback gehen…
Aber hier ein beispiel für e:
[php]
$content = preg_replace(‚[/php]!eisU‘, ‚highlight_string(„${1}“)‘, $content);
[/php]
Gruß
/E:
Der Modifikator e bewirkt, dass der string des 2. parameters als php code ausgeführt wird.
mehr infos hier: http://de.php.net/manual/de/reference.pcre.pattern.modifiers.php
Ich konnte es nun so lösen:
[php]
function return_code($a) {
$a[1] = trim($a[1]);
return highlight_string($a[1],true);
}
function bbcode($text) {
$text = preg_replace_callback („[/php]!isU“,‚return_code‘,$text);
return $text;
}[/php]