在PHP中,如何在字符串中调用函数?
发布时间:2020-12-13 13:11:30 所属栏目:PHP教程 来源:网络整理
导读:比如说,字符串是: $str="abcdefg foo() hijklmopqrst"; 如何让php调用foo()并将返回字符串插入此字符串? $str="abcdefg foo() hijklmopqrst";function foo() {return "bar";}$replaced = preg_replace_callback("~([a-z]+)()~",function ($m){ return $m
比如说,字符串是:
$str="abcdefg foo() hijklmopqrst"; 如何让php调用foo()并将返回字符串插入此字符串? $str="abcdefg foo() hijklmopqrst"; function foo() {return "bar";} $replaced = preg_replace_callback("~([a-z]+)()~",function ($m){ return $m[1](); },$str); 输出: $replaced == 'abcdefg bar hijklmopqrst'; 这将允许任何小写字母作为函数名称.如果您需要任何其他符号,请将它们添加到模式中,即[a-zA-Z_]. 要非常小心允许调用哪些函数.您至少应该检查$m [1]是否包含白名单函数以禁止远程代码注入攻击. $allowedFunctions = array("foo","bar" /*,...*/); $replaced = preg_replace_callback("~([a-z]+)()~",function ($m) use ($allowedFunctions) { if (!in_array($m[1],$allowedFunctions)) return $m[0]; // Don't replace and maybe add some errors. return $m[1](); },$str); Testrun on“abcdefg foo()bat()hijklmopqrst”输出“abcdefg bar bat()hijklmopqrst”. 白名单方法的优化(从允许的函数名称动态构建模式,即(foo | bar). $allowedFunctions = array("foo","bar"); $replaced = preg_replace_callback("~(".implode("|",$allowedFunctions).")()~",function ($m) { return $m[1](); },$str); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |