在PHP中,如何在字符串中调用函数?

前端之家收集整理的这篇文章主要介绍了在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[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);
原文链接:https://www.f2er.com/php/136645.html

猜你在找的PHP相关文章