<?php
$ar[1] = "1234";
$v = preg_replace("/\[item\](\d)\[\/item\]/","\$ar[\\1]","[item]1[/item]");
eval("\$k=\"$v\";");
echo $k;
?>
$ar[1] = "1234";
$v = preg_replace("/\[item\](\d)\[\/item\]/","\$ar[\\1]","[item]1[/item]");
eval("\$k=\"$v\";");
echo $k;
?>
你建立一个数组,
索引是“源字符串”,值则是“目标字符串”
比如这样,
function conversions($arg)
{
$trans = array(":)" => "<img src=\"../img/emoticons/regular_smile.gif\" width=\"19\" height=\"19\">",
":(" => "<img src=\"../img/emoticons/sad_smile.gif\" width=\"19\" height=\"19\">",
":'(" => "<img src=\"../img/emoticons/cry_smile.gif\" width=\"19\" height=\"19\">",
":@" => "<img src=\"../img/emoticons/angry_smile.gif\" width=\"19\" height=\"19\">");//中间省略了很多
$result = strtr($arg, $trans);
return $result;
}
例:
<?php
$ar = array("1234","abc","awe3","sdf");
$s = "[item]1[/item]<br>[item]0[/item]-dsfg<br>[item]2[/item][item]3[/item]";
$v = preg_replace("/\[item\](\d+)\[\/item\]/","\$ar[\\1]",$s);
eval("\$k=\"$v\";");
echo $k;
?>
$ar = array("1234","abc","awe3","sdf"); // 定义数组
$s = "[item]1[/item]<br>[item]0[/item]-dsfg<br>[item]2[/item][item]3[/item]"; // 待替换的串
$v = preg_replace("/\[item\](\d+)\[\/item\]/","\$ar[\\1]",$s); // 替换形如"[item]i[/item]"的部分为'$ar[i]'
// 按例,将$s变为“$ar[1]<br>$ar[0]-dsfg<br>$ar[2]$ar[3]”
eval("\$k=\"$v\";"); // 宏替换,将真实的值代入,赋予变量$k
echo $k;
?>
替换出来的结果应该是这样吧?
$k="$v";为什么有的地方要用"\"来转义,有的就不要?(比如$v前面为什么没有\)?
在什么地方要转义,要视情况而定比如有 $k='aa',在 eval("\$k=\"$v\";"); 中
$k 不转义的话,则就会有 aa="$v"; 显然是错误的
$v 没有转义的原因是出于书写的方便,因为传递给eval的是一个php的语句
按正常习惯书写就可以了。只是要注意到是以串的形式书写的。
写成 eval('$k = $v;'); 也是一样的。