php正则问题

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2008-6-20 2:00:20 我要发布文章

preg_match_all("/\{([^\{\}]+\(.*?\)[^\{\}]*)\}/s",$str,$tmp_array); $tmpstr=implode(' ',$tmp_array[1]); preg_match_all("/([a-zA-Z0-9_\x7f-\xff]+)\(/",$tmpstr,$tmp_array); $tmp_array=array_unique($tmp_array[1]); $funerr=0; if(is_array($tmp_array)){ foreach($tmp_array as $value){ if(substr($value,0,4)!='tag_'){ echo "$value
"; $funerr++; } }

$funerr && exit("该模板中调用了上述不允许的函数,模板编译失败!"); } 上面是代码,功能是检查 {模板标记} 中任何方式调用函数的函数名称是不是以 tag_ 带头。成功测试的方式有 {tag_cut();phpinfo()} {if $abc=1 phpinfo()} {loop phpinfo() $a} 想不出其他测试方式了,反正不管什么乱七八糟的调用方式,都能被检查出来! 模板中嵌入php代码在开始中用 $str=preg_replace("/\<\?.*\?\>/sU","",$str); 除去了。经本人多次测试,好像模板中是没有办法调用非 tag_为前缀的函数了。 欢迎大家继续测试!