无法使preg_replace_callback功能正常工作

时间:2014-02-02 17:01:58

标签: php preg-replace-callback

如果您发现任何错误,它将无效。

function replaceLink($matches){
    $final = '<img src=\''.$path[$matches[1]].'\' alt=\''.$data['alt'].'\'/>';
    return $final;
}
$message = preg_replace_callback('#\[img\]([1-3])\[/img\]#isU', 'replaceLink', $message);

我如何使用在函数外声明的变量?

2 个答案:

答案 0 :(得分:0)

您没有传递函数,而是传递字符串:

$message = preg_replace_callback('...', 'replaceLink', $message);

应该是这样的:

$message = preg_replace_callback('...', replaceLink, $message);

答案 1 :(得分:0)

以这种方式调用函数

$message = preg_replace_callback('#\[img\]([1-3])\[/img\]#isU', 'replaceLink', $message);

没问题。应该工作。

但我在你的函数replaceLink()

中看到了这一点
function replaceLink($matches){
    $final = '<img src=\''.$path[$matches[1]].'\' alt=\''.$data['alt'].'\'/>';
    return $final;
}

您使用未在该$path $data中定义的变量。 如果它们是在函数外部定义的并且它们不是全局的,则它们将在replaceLink()内为空,并且您应该得到错误。

尝试使用此代码

$message = preg_replace_callback( 
    '#\[img\]([1-3])\[/img\]#isU', 
    function($matches) use ($path, $data) {
         $final = '<img src=\''.$path[$matches[1]].'\' alt=\''.$data['alt'].'\'/>';
         return $final;
    }, 
    $message 
);