2010-01-17 22 views
10

ich einige Code mit einer Struktur ähnlich wie dieseAufruf Funktion innerhalb preg_replace das ist in einer Funktion

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

Das Problem ist ein Fehler spuckt mich zurück.

Parse-Fehler: Syntaxfehler, unerwartete T_LNUMBER, T_VARIABLE oder ‚$‘

irgendwelche Ideen erwarten, wie ich in der preg_replace der bbcode Funktion aufrufen embed_video können?

Danke!

Antwort

30

Sie können die "e" Modifikator auf preg_replace() (siehe Pattern Modifiers)

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

die preg_replace() den zweiten Parameter als PHP-Code zu behandeln sagt verwenden.

+0

vielen Dank. perfekt – jiexi

+0

cool. Du hast mein Problem gelöst! Vielen Dank!! – Cris

+17

Eigentlich ist der Modifikator "/ e" veraltet (was zu einer Sicherheitslücke führen kann) und Sie sollten ['preg_replace_callback'] (http://php.net/manual/en/function.preg-replace-callback) verwenden. php) statt –

26

versuchen preg_replace_callback

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

function embed_video($matches) 
{ 
    return $matches[1] . 'foo';  
} 
+0

vielleicht sollte ich ein anderes preg_replace Inneren – jiexi

+0

etwas speziellere die embed_video() hat bekannt ist, dass in Ordnung, können Sie alle Transformationen in embed_video notwendig machen ... preg_replace_callback wird es für alle Spiele gefunden aufrufen und das Ergebnis nehmen – jspcal

Verwandte Themen