更改youtube网址在php中嵌入网址

时间:2013-03-14 04:51:41

标签: php regex youtube preg-replace

我发现此代码(Swap all youtube urls to embed via preg_replace())将youtube网址(http://www.youtube.com/watch?v=CfDQ92vOfdchttp://www.youtube.com/v/CfDQ92vOfdc)换成youtube embed网址(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

提前致谢。

3 个答案:

答案 0 :(得分:7)

一个问题是你的表达式期望地址周围的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;

答案 1 :(得分:5)

更改

$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';

答案 2 :(得分: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;
}