PHP将preg_replace转换为preg_replace_callback

时间:2014-04-23 11:33:55

标签: php

只是想知道如何将以下preg_replace()转换为preg_replace_callback() - 我很难转换为preg_replace_callback()因为preg_replace()已被弃用。

$tableData['query'] = preg_replace('/{%(\S+)%}/e', '$\\1', $tableData['query']);

将所有$string替换为$string变量。

预先感谢大家

1 个答案:

答案 0 :(得分:1)

你可以这样做。我假设您知道eval的危险,因此请自行承担风险。

$locals = get_defined_vars();

$tableData['query'] = preg_replace_callback('/{%(\S+)%}/', function ($match) use ($locals) {
    if (!array_key_exists($match[1], $locals)) {
        // the variable wasn't defined - do your error logic here
        return '';
    }
    return $locals[$match[1]];
}, $tableData['query']);

附加警告 - 任何“声明”变量都是合理的游戏!没有什么能阻止我在$tableData['query']变量中有这样的东西:

I am evil and want to see {%super_secret_variable%}!