Eine etwas speziellere Funktion um Platzhalter zu ersezten.
Die Eingabe wird zeilenweise auf ein einzeiliges Template angewandt.
Es gibt zwei Platzhalter, "_$_" wird durch die Eingabe ersetzt und "#n#" fortlaufend inkrementiert.
Damit lassen sich z.B. schnell Folgen von <option> oder <li> Tags erstellen.
<?php
/**
* Zeilenweises ergänzen eines Template
*
* #n# increment (start n)
* _$_ Zeile
*/
function LineTemplate($s, $tpl)
{
$rv = '';
$arr = explode("\n", $s);
foreach ($arr as $item){
$item = trim($item);
if (empty($item)){
continue;
}
$tmp = str_replace('_$_', $item, $tpl);
$tmp = preg_replace('/#(\d+)#/e', 'isset($n)?++$n:$n=\1', $tmp);
$rv .= $tmp."\n";
}
return $rv;
}
if (isset($_POST['msg']) && !empty($_POST['msg'])){
$_POST['msg'] = get_magic_quotes_gpc()
? stripslashes($_POST['msg'])
: $_POST['msg'];
$_POST['tpl'] = get_magic_quotes_gpc()
? stripslashes($_POST['tpl'])
: $_POST['tpl'];
echo '<pre>'.htmlentities(LineTemplate($_POST['msg'], $_POST['tpl']), ENT_COMPAT, 'UTF-8').'</pre>';
$msg = htmlentities($_POST['msg'], ENT_COMPAT, 'UTF-8');
$tpl = htmlentities($_POST['tpl'], ENT_COMPAT, 'UTF-8');
}else{
$msg = <<<EOT
A
B
C
EOT;
$tpl = htmlentities('<option value="#1#">_$_</option>');
}
echo <<< EOT
<form method="post" action="{$_SERVER['PHP_SELF']}">
<label>Eingabe, wird zeilenweise abgearbeitet.</label>
<textarea name="msg" rows="10" cols="70">$msg</textarea>
<br/><br />
<label>Template</label>
<input type="text" name="tpl" size="100" value="$tpl" />
<input type="submit" value="anwenden">
</form>
EOT;
?>