4

我找到了这段代码(交换所有 youtube url 以通过 preg_replace() 嵌入)来交换 youtube url(http://www.youtube.com/watch?v=CfDQ92vOfdchttp://www.youtube.com/v/ CfDQ92vOfdc)到 youtube 嵌入网址(http://www.youtube.com/embed/CfDQ92vOfdc),但它似乎没有工作?有任何想法吗?我对正则表达式了解不多。

这是代码:

$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/watch?v=CfDQ92vOfdc

代替:

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

提前致谢。

4

4 回答 4

8

一个问题是您的表达式期望地址周围有 a-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;
于 2013-03-14T05:12:13.507 回答
7

要么改变

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

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

或者

$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';
于 2013-03-14T05:04:55.597 回答
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';

于 2016-04-11T12:06:38.090 回答
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;
}
于 2017-08-30T20:01:40.860 回答