加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读