ठीक है, मुझे लगता है कि मैं देख रहा हूँ कि आप क्या हासिल करने की कोशिश कर रहे हैं। कोई उपयोगकर्ता टेक्स्ट का ब्लॉक (कुछ टिप्पणी या जो कुछ भी) इनपुट करता है, और आपको उस पाठ में एक यूट्यूब यूआरएल मिल जाता है और इसे वास्तविक वीडियो एम्बेड कोड से बदल दिया जाता है।
यहां बताया गया है कि मैं इसे संशोधित कर लिया है:
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)
सबसे आसान और सबसे मज़बूत तरीका एक regex का उपयोग नहीं किया जाएगा। – FailedDev
@FailedDev देखभाल मुझे दिखाने के लिए कैसे (एक ही समारोह नहीं होना चाहिए)? – domino
आप $ स्ट्रिंग के साथ एचटीएमएल का हिस्सा गुजर रहे हैं? आप उस स्ट्रिंग को कैसे प्राप्त करते हैं? – FailedDev