Hallo Andavos,
Irgendwie muss man dort was mit den Anführungszeichen, glaub ich.
ich glaube der Funktionsaufruf funktioniert nicht richtig (frag mich aber nicht, warum :-))
Bzw. hat jemand eine idee, wie man das evt. noch anders lösen könnte?
ich habe mal eine kleines Script geschrieben:
<script>
$string='test {bl>a} nix {bl<<<<&"a} texttext';
preg_match_all("/{([^}]+)}/",$string,$match);
$von = array();
$nach = array();
foreach($match[1] as $eintrag){
$von[] = '{'.$eintrag.'}';
$nach[] = text_format($eintrag,'htmlmaskieren');
}
echo str_replace($von,$nach,$string);
//Ausgabe: 'test bl>a nix bl<<<<&"a texttext'
</script>
(text_format() ist eine Funktion von mir, mit der man u.a. in einem String htmleigene Zeichen durch die Entities ersetzen kann)
Das Script sucht sich erst alle Strings*, die innerhalb von geschweiften Klammern vorkommen und schreibt diese in ein Array (mit Hilfe der Funktion preg_match_all), dann wird die Liste der gefundenen Strings (die dann in $match[1] stehen) durchlaufen, und jeweils ein Eintrag zum Array $von und $nach hinzugefügt. Das Array $von enthält dann alle Strings einschließlich der geschweiften Klammern, und das Array $nach den Text durch den der String mit den geschweiften Klammern ersetzt werden soll (in dem Fall der mit text_format bearbeitete Text). Am Ende wird mit str_replace noch der Inhalt von $von durch den Inhalt von $nach ersetzt.
Ich hoffe, das war das was du gesucht hast :-) Wenn nicht, erläutere mal etwas genauer, was du machen willst, und was die Funktion gettemplate eigentlich macht.
* für Tom (auch wenn es ein einfacher regulärer Ausdruck ist :-)): der Reguläre Ausdruck sucht nach eine Zeichenkette, die mit '{' beginnt, von mindestens einem beliebigen Zeichen (nur kein '}') gefolgt wird, und mit einem '}' endet. Dabei wird das was zwischen '{' und '}' steht gespeichert.
HTH & Grüße,
Tobias
Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|