preg_replace_callback():要求参数2成为有效的回调函数

时间:2016-06-26 21:07:56

标签: php regex preg-replace-callback

$ent_check = empty($modSettings['disableEntityCheck']) ? 
    array('preg_replace_callback(\'~(&#(\d{1,7}|x[0-9a-fA-F]{1,6});)~e\', \'$func[\\\'entity_fix\\\'](\\\'\\2\\\')\', ', ')') : 
    array('', '');
  

Warning: preg_replace_callback(): Requires argument 2, '$func['entity_fix']('\2')', to be a valid callback in...

我不太清楚在这做什么。我会非常感谢任何比我聪明的人的帮助......

1 个答案:

答案 0 :(得分:2)

这里的第一个问题是意图。好吧,传递给preg_replace_callback($arg1, $arg2...)的第二个论点预计是 Callable 。这就是你有这个错误的原因。目前还不清楚你的代码在哪里,但也许下面的代码可以提供更多的亮点,并帮助你重新思考/澄清你的问题,意图+目标或重新访问你的代码。考虑一下:

<?php
    $string         = "&#2510 whatever &#5870 again whatever &#7885";
    $modSettings    = array('disableEntityCheck'=>array());
    $func           = array(
        "fix_stuff"     => function($param=20){ echo $param;},
        "do_stuff"      => function($param=10){ echo $param;},
        "entity_fix"    => function($matches ){ return $matches[0] . "YES!!! ";},
    );

    $ent_check  = empty($modSettings['disableEntityCheck']) ? array(preg_replace_callback('#\d#', $func['entity_fix'], $string )) :  array('', '');
    var_dump($ent_check);

    // DISPLAYS  
    array (size=1)
        0 => string '&#2YES!!! 5YES!!! 1YES!!! 0YES!!!  whatever &#5YES!!! 8YES!!! 7YES!!! 0YES!!!  again whatever &#7YES!!! 8YES!!! 8YES!!! 5YES!!! '

请注意,在上面的代码中,传递给preg_replace_callback的第二个参数是一个函数 虽然作为 参考 <传递strong> 到&#39; entity_fix&#39;数组的键:$ func 。这是为了强调这样一个事实,即也可以以这种方式传递第二个论点。希望这里给你一点小小的启动; - )

祝你好运!!!