Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Preg_将youtube链接替换为嵌入链接_Php - Fatal编程技术网

PHP Preg_将youtube链接替换为嵌入链接

PHP Preg_将youtube链接替换为嵌入链接,php,Php,好的,各位,我已经找到了多种方法,我甚至已经让它工作了,但我的问题是,根据我的理解,preg_replace应该替换所有符合模式的东西,但它似乎只运行一次 这就是我需要的,我有一个网站正在运行一个功能,让用户在他们的个人资料上发布他们想要的任何东西,我们想让他们也发布youtube链接,并让这些链接变成嵌入。当他们发布多个视频时,问题就出现了,它只会嵌入其中一个视频,更糟糕的是,它会删除文本 $test = "This is a great lecture: http://www.youtube

好的,各位,我已经找到了多种方法,我甚至已经让它工作了,但我的问题是,根据我的理解,preg_replace应该替换所有符合模式的东西,但它似乎只运行一次

这就是我需要的,我有一个网站正在运行一个功能,让用户在他们的个人资料上发布他们想要的任何东西,我们想让他们也发布youtube链接,并让这些链接变成嵌入。当他们发布多个视频时,问题就出现了,它只会嵌入其中一个视频,更糟糕的是,它会删除文本

$test = "This is a great lecture: http://www.youtube.com/watch?v=Ps8jOj7diA0 This is another great lecture http://www.youtube.com/watch?v=k6U-i4gXkLM What are your opinions on the two?"
$patterns[] = '|http://www\.youtube\.com/watch\?.*\bv=([^ ]+)|';
$replacements[] = ' <br /><iframe width="420" height="315" src=http://www.youtube.com/embed/$1 frameborder="0" allowfullscreen></iframe><br />';
$patterns[] = '|&feature=related|';
$replacements[] = '';
$test = preg_replace($patterns, $replacements, $test);
echo $test;
Output:
"This is a great lecture: 
<iframe width="420" height="315" src=http://www.youtube.com/embed/k6U-i4gXkLM frameborder="0" allowfullscreen></iframe>
What are your opinions on the two?"
$test=“这是一个很棒的讲座:http://www.youtube.com/watch?v=Ps8jOj7diA0 这是又一次伟大的演讲http://www.youtube.com/watch?v=k6U-i4gXkLM您对这两个问题有什么看法?”
$patterns[]='|http://www\.youtube\.com/watch\?.*\bv=([^]+)|';
$replacements[]='

'; $patterns[]='|&feature=相关|'; $replacements[]=''; $test=preg_replace($patterns,$replacements,$test); 回声试验; 输出: “这是一次很棒的演讲: 你对这两个问题有什么看法?”
所以你看。。。它剪切第一个和第二个视频之间的所有内容,只嵌入第二个视频。我需要一个解决方案,让我删除youtube链接产生的额外内容,同时保留用户发布的所有消息文本。你知道是谁吗?谢谢。

不要贪心

http://www\.youtube\.com/watch\?.*?\bv=([^ ]+)

请注意此处的额外
中的
?*?
http://www\.youtube\.com/watch\?.*\bv=([^]+)

杰克的代码有两个问题: -它无法正确捕获位于行尾的链接(\n个字符) -它不会删除可选的附加参数(例如&list=…)

以下是完整的代码:

$test = "This is a great lecture: http://www.youtube.com/watch?v=Ps8jOj7diA0&list=PL33AFE53E080251DF This is another great lecture http://www.youtube.com/watch?v=k6U-i4gXkLM What are your opinions on the two?"
$patterns = array('|http://www\.youtube\.com/watch\?.*?\bv=([^&]+).+?\s|i');
$replacements = array(' <br /><iframe width="400" height="300" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe><br />');
$test= preg_replace($patterns, $replacements, $test);
$test=“这是一个很棒的讲座:http://www.youtube.com/watch?v=Ps8jOj7diA0&list=PL33AFE53E080251DF 这是又一次伟大的演讲http://www.youtube.com/watch?v=k6U-i4gXkLM您对这两个问题有什么看法?”
$patterns=array('|http://www\.youtube\.com/watch\?*?\bv=([^&]+).+?\s|i');
$replacements=数组(“

”); $test=preg_replace($patterns,$replacements,$test);
您真的不应该使用
|
作为正则表达式分隔符。几乎每个人都希望它在正则表达式中有“或”的共同含义。这就像发现区别一样:P先生,你真棒:D非常感谢