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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值