PHP动态变量替换,可以使用正则的e修饰符将正则视作PHP代码执行,
如以下例子,将字符串中的abc提取出来,转换为变量$abc,将{abc}替换为变量$abc的md5值:
<?php
$abc="aaaa";
$str="hello {abc} world!";
$preg="/{(.*)}/ieU";
echo preg_replace($preg,"md5($\\1)",$str);
?>除了正则e修饰符外,还可以用正则+字符替换的方法,当然,这得稍微麻烦一点.不过还是很好理解.
假设有一个模板页m.htm
----------
<html>
<body>
<div>
{title}
{news}
</div>
</body>
</html>
----------
$title='新闻标题';
$news='新闻内容';
现在要将{title}换成$title的内容,将{news}换成$news的内容.
如果变量少的话,可以用str_replace()函数直接替换.
代码:
<?php
$m=file_get_contents('m.htm');
$title='新闻标题';
$news='新闻内容';
$m=str_replace(array('{title}','{news}'),array($title,$news),$m);
$file=date('Ymdhis').'.htm';
if(file_put_contents($file,$m)){//生成静态页面
echo '已经生成'.$file;
}
?>
如果变量较多,需要使用正则动态替换.
代码:
<?php
$m=file_get_contents('m.htm');
$title='新闻标题';
$news='新闻内容';
//……,还可以添加更多,在模板中也类似添加。
$preg="/{(.*)}/iU";
$n=preg_match_all($preg,$m,$rs);
$rs=$rs[1];
if($n>0){
foreach($rs as $v){
if(isset($$v)){
$oArr[]='{'.$v.'}';
$tArr[]=$$v;
$m=str_replace($oArr,$tArr,$m);
}
}
}
$file=date('Ymdhis').'.htm';
if(file_put_contents($file,$m)){//生成静态页面
echo '已经生成'.$file;
}
?> |
|