15

これに似た構造のコードがいくつかあります

           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);

問題は、エラーが返されることです。

解析エラー: 構文エラー、予期しない T_LNUMBER、T_VARIABLE または '$' が必要です

bbcode関数のpreg_replace内でembed_videoを呼び出す方法について何かアイデアはありますか?

ありがとう!

4

2 に答える 2

39

preg_replace_callbackを試してください

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

function embed_video($matches)
{
  return $matches[1] . 'foo';      
}
于 2010-01-17T19:03:12.087 に答える
31

「e」修飾子を使用できますpreg_replace()(パターン修飾子を参照)

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

これはpreg_replace()、2 番目のパラメーターを PHP コードとして扱うように指示します。

于 2010-01-17T19:10:32.473 に答える