2013-03-14 79 views
3

我发现此代码(Swap all youtube urls to embed via preg_replace())将youtube网址(http://www.youtube.com/watch?v=CfDQ92vOfdchttp://www.youtube.com/v/CfDQ92vOfdc)互换为youtube嵌入网址(http://www.youtube.com/embed/CfDQ92vOfdc),但它似乎不工作?有任何想法吗?我不太了解正则表达式。更改youtube网址以在php中嵌入网址

下面的代码:

$string  = 'http://www.youtube.com/watch?v=CfDQ92vOfdc'; 
$search  = '#<a (?:.*?)href=["\\\']http[s]?:\/\/(?:[^\.]+\.)*youtube\.com\/(?:v\/|watch\?(?:.*?\&)?v=|embed\/)([\w\-\_]+)["\\\']#ixs'; 
$replace = 'http://www.youtube.com/embed/$2'; 
$url  = preg_replace($search,$replace,$string); 

但它仍显示:提前

http://www.youtube.com/embed/CfDQ92vOfdc 

感谢:中

http://www.youtube.com/watch?v=CfDQ92vOfdc 

代替。

+2

它找一个锚标记,而不仅仅是一个URL。你的字符串应该是' Leeish 2013-03-14 04:54:32

+0

啊我看到了你的帮助谢谢:) – SoulieBaby 2013-03-14 05:10:48

回答

5

要么改变

$string = 'http://www.youtube.com/watch?v=CfDQ92vOfdc';

$string = '<a href="http://www.youtube.com/watch?v=CfDQ92vOfdc" ></a>';

OR

$search  = '#<a (?:.*?)href=["\\\']http[s]?:\/\/(?:[^\.]+\.)*youtube\.com\/(?:v\/|watch\?(?:.*?\&)?v=|embed\/)([\w\-\_]+)["\\\']#ixs'; 

$search  = '#(.*?)(?:href="https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch?.*?v=))([\w\-]{10,12}).*#x'; 
+0

对我很好,因为我不需要标签。谢谢:) – SoulieBaby 2013-03-14 05:11:08

+0

非常感谢你!:) – 2017-05-31 06:16:46

5

一个问题是您的表达式期望在地址周围使用-href标记。 另一个问题是您的$ replace字符串使用单引号,它不会分析$ 2。

这种简单的表达应该工作:

$string  = 'http://www.youtube.com/watch?v=CfDQ92vOfdc'; 
$search  = '/youtube\.com\/watch\?v=([a-zA-Z0-9]+)/smi'; 
$replace = "youtube.com/embed/$1";  
$url = preg_replace($search,$replace,$string); 
echo $url; 
+0

非常酷;目前在生产中使用此修改后的版本。谢谢! – HollerTrain 2017-08-30 20:01:03

0

如果有任何人谁仍在寻找更好的直线上升的解决方案, 这里,我只是打了你的代码,直到它给了我一个简单的解决方案。

$string  = $content; 

$search = '/www.youtube\.com\/watch\?v=([a-zA-Z0-9]+)/smi';

$replace = "<iframe width='560' height='315' src='https://youtube.com/embed/$1' frameborder='0' allowfullscreen></iframe> ";
$content = preg_replace($search,$replace,$string);

注:选择您希望的联系要处理只需编辑$search部分, 如果你将从www.youtube.com这将是处理 $search = '/www.youtube\.com\/watch\?v=([a-zA-Z0-9]+)/smi';

其他如果你想它只处理youtube.com链接只是删除www. $search = '/youtube\.com\/watch\?v=([a-zA-Z0-9]+)/smi';

0

这里是一个函数,我写你回声出结果:

function youtube_url_to_embed($youtube_url) { 
    $search = '/youtube\.com\/watch\?v=([a-zA-Z0-9]+)/smi'; 
    $replace = "youtube.com/embed/$1"; 
    $embed_url = preg_replace($search,$replace,$youtube_url); 
    return $embed_url; 
}