在函数内部的preg_replace中调用函数

jie*_*exi 14 php function syntax-error preg-replace

我有一些与此类似的结构的代码

           function bbcode($Text)
           { //$Text = preg_replace("/\[video\](.+?)\[\/video\]/",embed_video($1), $Text);
    return $Text;}

    function embed_video($url){
if (preg_match("/http:\/\/www.youtube.com\/watch\?v=([0-9a-zA-Z-_]*)(.*)/i", $url, $matches)) {
    return '<object width="425" height="350">'.
           '<param name="movie" value="http://www.youtube.com/v/'.$matches[1].'" />'.
           '<param name="wmode" value="transparent" />'.
           '<embed src="http://www.youtube.com/v/'.$matches[1].'&autoplay="0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350" />'.
           '</object>';
}
    return $url;
    }

$lolcakes = "[video]http://youtube.com/id/xxxxxxpron[/video]";
$lolcakesconverted = bbcode($lolcakes);
Run Code Online (Sandbox Code Playgroud)

问题是它向我吐出一个错误.

解析错误:语法错误,意外T_LNUMBER,期待T_VARIABLE或'$'

如何在bbcode函数的preg_replace中调用embed_video有任何想法?

谢谢!

jsp*_*cal 34

尝试preg_replace_callback

return preg_replace_callback("/\[video\](.+?)\[\/video\]/", 'embed_video', $Text);

function embed_video($matches)
{
  return $matches[1] . 'foo';      
}
Run Code Online (Sandbox Code Playgroud)

  • 不再支持 /e 修饰符,请使用 preg_replace_callback (2认同)

Owe*_*wen 30

您可以使用"e"修饰符preg_replace()(参见模式修饰符)

return preg_replace("/\[video\](.+?)\[\/video\]/e", "embed_video('$1')", $Text);
Run Code Online (Sandbox Code Playgroud)

告诉preg_replace()将第二个参数视为PHP代码.

  • 实际上,"/ e"修饰符已被弃用(因为可能导致安全漏洞),您应该使用[`preg_replace_callback`](http://php.net/manual/en/function.preg-replace-callback.php )而不是 (28认同)