2011-11-19 22 views
6

यह फ़ंक्शन स्ट्रिंग में पाए जाने पर यूट्यूब वीडियो एम्बेड करता है।अपने यूट्यूब एम्बेड कोड के साथ यूट्यूब यूआरएल को टेक्स्ट में बदलें

मेरा सवाल यह है कि केवल एम्बेडेड वीडियो (iframe और केवल पहले होने पर पहले) को कैप्चर करने का सबसे आसान तरीका क्या होगा और शेष स्ट्रिंग को अनदेखा करें।

function youtube($string,$autoplay=0,$width=480,$height=390) 
{ 
preg_match('#(v\/|watch\?v=)([\w\-]+)#', $string, $match); 
    return preg_replace(
    '#((http://)?(www.)?youtube\.com/watch\?[=a-z0-9&_;-]+)#i', 
    "<div align=\"center\"><iframe title=\"YouTube video player\" width=\"$width\" height=\"$height\" src=\"http://www.youtube.com/embed/$match[2]?autoplay=$autoplay\" frameborder=\"0\" allowfullscreen></iframe></div>", 
    $string); 
} 
+0

सबसे आसान और सबसे मज़बूत तरीका एक regex का उपयोग नहीं किया जाएगा। – FailedDev

+0

@FailedDev देखभाल मुझे दिखाने के लिए कैसे (एक ही समारोह नहीं होना चाहिए)? – domino

+0

आप $ स्ट्रिंग के साथ एचटीएमएल का हिस्सा गुजर रहे हैं? आप उस स्ट्रिंग को कैसे प्राप्त करते हैं? – FailedDev

उत्तर

13

ठीक है, मुझे लगता है कि मैं देख रहा हूँ कि आप क्या हासिल करने की कोशिश कर रहे हैं। कोई उपयोगकर्ता टेक्स्ट का ब्लॉक (कुछ टिप्पणी या जो कुछ भी) इनपुट करता है, और आपको उस पाठ में एक यूट्यूब यूआरएल मिल जाता है और इसे वास्तविक वीडियो एम्बेड कोड से बदल दिया जाता है।

यहां बताया गया है कि मैं इसे संशोधित कर लिया है:

function youtube($string,$autoplay=0,$width=480,$height=390) 
{ 
    preg_match('#(?:http://)?(?:www\.)?(?:youtube\.com/(?:v/|watch\?v=)|youtu\.be/)([\w-]+)(?:\S+)?#', $string, $match); 
    $embed = <<<YOUTUBE 
     <div align="center"> 
      <iframe title="YouTube video player" width="$width" height="$height" src="http://www.youtube.com/embed/$match[1]?autoplay=$autoplay" frameborder="0" allowfullscreen></iframe> 
     </div> 
YOUTUBE; 

    return str_replace($match[0], $embed, $string); 
} 

आप पहले से ही पहले preg_match() साथ यूआरएल पता लगाने कर रहे हैं, वहाँ जगह के लिए एक और regex समारोह को चलाने के लिए आवश्यकता नहीं है। क्या यह पूरे यूआरएल से मेल खाता है, फिर अपने पूरे मैच ($match[0]) के एक साधारण str_replace() करें। वीडियो कोड पहले उप-पैटर्न ($match[1]) में कब्जा कर लिया गया है। मैं preg_match() का उपयोग कर रहा हूं क्योंकि आप केवल पहले यूआरएल से मेल खाना चाहते हैं। आपको preg_match_all() का उपयोग करना होगा और कोड को थोड़ा सा संशोधित करना होगा यदि आप सभी यूआरएल से मेल खाना चाहते थे, न केवल पहले।

यहाँ मेरी नियमित अभिव्यक्ति की व्याख्या दी गई:

(?:http://)? # optional protocol, non-capturing 
(?:www\.)?  # optional "www.", non-capturing 
(?: 
       # either "youtube.com/v/XXX" or "youtube.com/watch?v=XXX" 
    youtube\.com/(?:v/|watch\?v=) 
    | 
    youtu\.be/  # or a "youtu.be" shortener URL 
) 
([\w-]+)  # the video code 
(?:\S+)?  # optional non-whitespace characters (other URL params) 
+0

प्रदान करना होगा, मैं नेट पर इस स्क्रिप्ट को खोज रहा हूं। यह एक काम करता है लेकिन यह केवल सामग्री में पहले यूआरएल का पता लगाता है। उदाहरण के लिए, मेरे पास सामग्री में 3 यूट्यूब यूआरएल हैं। पहला वीडियो एम्बेड करेगा जबकि अन्य सिर्फ लिंक प्रदर्शित करेंगे। मुझे क्या करना चाहिए? – Wilf

+0

मुझे मिल गया है! बस 'preg_match' को' preg_match_all' में बदलें ... धन्यवाद लाखों! – Wilf

+0

मुझे यह एक काम मिल गया है: http://stackoverflow.com/a/5452862/1620626 – Wilf

संबंधित मुद्दे