preg_replace替换preg_replace_callback

Discuz中大量用到preg_replace函数,特别是模板渲染这块,老是在debug中看到这类的警告

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in …

但是随着php版本的升级,有些函数已经不再被官方推荐使用了(查了文档后发现5.5.0以后废弃了preg_replace)

preg_replace

无奈之下只能自己动手替换。

替换前

1
2
3
4
5
$template = preg_replace (
"/[\n\r\t]*\{template\s+([a-z0-9_:\/]+)\}[\n\r\t]*/ies",
"\$this->stripvtags('<? include template(\'\\1\'); ?>')",
$template
);

方法一

1
2
3
4
5
$template = preg_replace_callback (
"/[\n\r\t]*\{template\s+([a-z0-9_:\/]+)\}[\n\r\t]*/ies",
"\$this->stripvtags('<? include template(\'\\1\'); ?>')",
$template
);

方法二

1
2
3
4
5
$template = preg_replace_callback (
"/[\n\r\t]*\{template\s+([a-z0-9_:\/]+)\}[\n\r\t]*/is", #注册这里没有e
$this->stripvtags('<? include template(\'\\1\'); ?>'),
$template
);

方法三

1
2
3
4
5
6
7
$template = preg_replace_callback (
"/[\n\r\t]*\{template\s+([a-z0-9_:\/]+)\}[\n\r\t]*/is", #注册这里没有e
function($matches){
return $this->stripvtags('<? include template(\''.$matches[1].'\'); ?>');
},
$template
);