2013-03-14 76 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; 
}