preg_replace实现字符串替换
需求: 后台配置一个url地址 url地址包含数据列表的某些变量标识 前台生成url时能自动替换变量为数据的值
效果如下
$url="http://xxxxx.html?id=[id]&title=[title]";
数据
$dataItem=array(
'id'=>'23',
'title'=>'测试数据'
)
实现:
$patt="/(\[(\w+)\])/e";
$url= preg_replace($patt,'$dataItem[\'$2\']',$url);
//关键点:
preg_replace替换时 patt正则表达式 增加e选项 则替换时 符合php语法的字符串 会交由eval去执行 最终可实现变量替换 或者函数传参执行
由于正则内匹配的字符串 会被php 的eval函数执行 所以千万对正则内的模式做到严格限制
如果 $patt=".*" 则能执行一个函数 对安全应该是有隐患的