当前位置: 首页 > 知识库问答 >
问题:

警告:preg_replace_callback():需要参数2,是一个有效的回调

上官鸿朗
2023-03-14

我正在使用wordpress插件Ultimate Membership Pro。我的代码中有一个小警告。我想不出问题出在哪里。

我试图检查PHP手册,也做这个主题的研究,但不能解决它。有人知道怎么解决吗?只需要一个提示。

Php代码:

原始代码:

if (!empty($data->history)){
        //print the history
        $dat = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $data->history);
        $dat = unserialize($dat);       
        if (isset($dat) && is_array($dat)){
            foreach ($dat as $k=>$transaction_history_arr){
                if (is_string($transaction_history_arr)){
                    //is json
                    $json = stripslashes($transaction_history_arr);
                    if ($k){
                        echo '<h4>' . date('Y-m-d H:i:s', $k) .'</h4>';
                    }
                    $arr = (array)json_decode($json, true);
                    foreach ($arr as $key=>$value){
                        echo $key.': '.$value.'<br/>';
                    }
                } else {    
                    //is an array
                    if ($k>0){ 
                        echo '<h4>' . date('Y-m-d H:i:s', $k) .'</h4>';
                    }
                    foreach ($transaction_history_arr as $key=>$value){
                        echo $key.' : '.$value.'<br/>';
                    }
                }
            }
        }
    }

错误:

警告:preg_replace():不再支持 /e修饰符,请在第44行的 /var/www/html/stock-market/wp-content/plugins/indeed-membership-pro/admin/includes/tabs/list_payments.php中使用preg_replace_callback

使用preg_replace_回调更新:

if (!empty($data->history)){
        //print the history
        print_r($data->history);
        $dat = preg_replace_callback('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $data->history);
        $dat = unserialize($dat);

对于更新的输出,如下所示:

警告:preg_replace_callback():需要参数2“s:”。斯特伦($2'):"$2";'', 成为/var/www/html/stock market/wp content/plugins/committee membership pro/admin/includes/tabs/list_payments中的有效回调。php在线44 2017-06-17 08:44:49

  ihc_payment_type : paypal  
   details : ss  
   uid : 1 
   level : 2 
   order_id : 21
   amount : 100.00
   currency : USD  
   txn_id : 1_21_1497689089 
   message : success

我的数组是$data-

a:1:{i:149768989;a:9:{s:16:“ihc支付”类型;s:6:“paypal”;s:7:“详细信息”;s:2:“ss”s:3:“uid”;s:1:“1”;s:5:“级别”;s:1:“2”;s:8:“订单id”;s:2:“21”s:6:“金额”;s:6:“100.00”;s:8:“货币”;s:3:“美元”;s:6:“txn\U id”;s:15:“1:“21”;s:7:“成功信息”}

警告:

 Warning: preg_replace_callback(): Requires argument 2, ''s:'.strlen('$2').':"$2";'', to be a valid callback in /var/www/html/stock-market/wp-content/plugins/indeed-membership-pro/admin/includes/tabs/list_payments.php on line 47

共有1个答案

柯冯浩
2023-03-14

如果你想做的事情我是对的,这可能就是你想要的:

$text = 'a:1:{i:1497689089;a:9:{s:16:"ihc_payment_type";s:6:"paypal";s:7:"details";s:2:"ss";s:3:"uid";s:1:"1";s:5:"level";s:1:"2";s:8:"order_id";s:2:"21";s:6:"amount";s:6:"100.00";s:8:"currency";s:3:"USD";s:6:"txn_id";s:15:"1_21_1497689089";s:7:"message";s:7:"success";}}';

$dat = preg_replace_callback('!s:(\d+):"(.*?)";!',
    function ($match) {
        return 's:'.strlen($match[2]).':"'.$match[2].'";';
    },
    $text);

注意,我已经从搜索模式中删除了e修饰符,然后传入了一个函数作为第二个参数。此函数获取匹配项并返回所需的替换项。

(还要注意,对于给定的输入,此替换不会改变任何内容。)

 类似资料:
  • 设置一个应该在图像上放置广告的应用程序时,我在运行代码时遇到了这个WordPress错误,这是一个令人沮丧的星期试图修复这个问题。 我希望它能工作,但它给了我以下错误:警告:preg_replace_callback():需要参数2,' 如果有人能想出一个解决方案,那将是惊人的,非常感谢!

  • 我刚刚更新了PHP在我的服务器从PHP 5到PHP 7,我得到了这些警告: 警告:preg_replace_callback()[function.preg-replace-callback0]:要求参数2“chr(\1)”是有效的回调 警告:preg\u replace\u callback() 警告:preg_replace_callback()[function.preg-replace-c

  • 此代码返回一个错误preg_replace_callback():要求参数2'Array'是一个有效的回调 我把它换成了 但是我想知道如何使用数组而不是3调用preg_replace_callback? 谢谢

  • 问题内容: 我尝试使php登录,但出现此错误:我做错了什么? register.php 我使用000webhost,这是我第一次在线使用mysql数据库时。 问题答案: 您正在混合和运行。 如果您使用的是mysql函数,请改用 如果您使用的是mysqli_ 函数,则必须将与数据库的连接包括到mysqli_real_escape函数中* : 注意:由于不建议使用mysql,因此请使用mysqli_

  • 我尝试使PHP登录,但我得到这个错误:我做错了什么? register.php 我使用000webhost,这是我第一次在线使用mysql数据库。

  • 当试图向会话添加数据(并检查它是否已经存在)时,我会收到以下警告。 警告:in_array()要求参数2为数组,给定null 我怎样才能解决这个问题? 它所指的代码: 我只有在清洁的浏览器上添加第一个产品时才会收到此警告。当我删除它并添加另一个产品时,警告就消失了。同样,如果我添加第二个产品。