2010-01-17 5 views
10

J'ai un code avec la structure similaire à cellefonction d'appel à l'intérieur thats preg_replace dans une fonction

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

Le problème est-il crache une erreur de retour à moi.

Parse error: syntax error, T_LNUMBER inattendue, attendant T_VARIABLE ou '$'

des idées sur la façon dont je peux appeler embed_video l'intérieur de la preg_replace de la fonction bbcode?

Merci!

Répondre

30

Vous pouvez utiliser le modificateur "e" sur preg_replace() (voir Pattern Modifiers)

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

qui indique preg_replace() pour traiter le second paramètre code PHP.

+0

merci beaucoup. parfait – jiexi

+0

cool. Vous avez résolu mon problème! Merci!! – Cris

+17

En fait, le modificateur "/ e" est obsolète (ce qui peut conduire à une faille de sécurité) et vous devez utiliser ['preg_replace_callback'] (http://php.net/manual/en/function.preg-replace-callback. php) à la place –

26

essayer preg_replace_callback

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

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

peut-être je aurais dû être un peu plus précis le embed_video() a un autre preg_replace intérieur – jiexi

+0

qui est très bien, vous pouvez faire toutes les transformations nécessaires embed_video ... preg_replace_callback appellerez pour les correspondances trouvées et prendre le résultat – jspcal

Questions connexes