2010-01-17 30 views
10

अंदर मैं एक संरचना के साथ कुछ कोड इसबुला समारोह एक समारोह

  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 कॉल कर सकते हैं पर किसी भी विचार है?

धन्यवाद!

उत्तर

30

आप preg_replace() "e" पर संशोधक का उपयोग कर सकते हैं (Pattern Modifiers)

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

जो preg_replace() बताता है PHP कोड के रूप में दूसरा पैरामीटर के इलाज के लिए।

+0

आपको बहुत बहुत धन्यवाद। सही – jiexi

+0

ठंडा। तुमने मेरी समस्या हल की! धन्यवाद!! – Cris

+17

दरअसल, "/ ई" संशोधक को बहिष्कृत किया जाता है (क्योंकि सुरक्षा भेद्यता हो सकती है) और आपको ['preg_replace_callback'] (http://php.net/manual/en/function.preg-replace-callback का उपयोग करना चाहिए। PHP) इसके बजाए –

26

कोशिश preg_replace_callback

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

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

शायद मैं थोड़ा अधिक विशिष्ट होना चाहिए embed_video() के अंदर यह – jiexi

+0

एक और preg_replace यह ठीक है, आप किसी भी परिवर्तनों embed_video में आवश्यक कर सकते हैं ... preg_replace_callback यह पाया किसी भी मैचों के लिए कहते हैं और परिणाम ले जाएगा है – jspcal