2012-03-27 11 views
0

Ich versuche, Youtube-Links einschließlich der a-Tags mit dem Iframe-Einbettungscode zu ersetzen. Was ich so weit gekommen:preg_replace youtube links - iframe embed

$tube_link = "<a href="http://www.youtube.com/watch?v=XA5Qf8VHh9I&amp;feature=g-all-u&amp;context=G2f50f6aFAAAAAAAADAA" target="_blank" rel="nofollow">http://www.youtube.com/watch?v=XA5Qf8VHh9I&amp;feature=g-all-u&amp;context=G2f50f6aFAAAAAAAADAA</a>" 

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

$replace = '<iframe width="150" height="84" src="http://www.youtube-nocookie.com/embed/$2"></iframe>'; 

$embed_code = preg_replace($search, $replace, $tube_link); 

Ergebnis:

<iframe src="http://www.youtube-nocookie.com/embed/XA5Qf8VHh9"></iframe>&amp;feature=g-all-u&amp;context=G2f50f6aFAAAAAAAADAA</a> 

Wie kann ich von den verbleibenden loszuwerden:

&amp;feature=g-all-u&amp;context=G2f50f6aFAAAAAAAADAA</a> 

Thnx!

+0

Verwenden Sie zum Analysieren von HTML keine regulären Ausdrücke. Es ist schlecht für die Aufgabe geeignet. Verwenden Sie stattdessen XPath oder etwas Ähnliches. Es wird viel besser funktionieren. –

Antwort

3

verwenden regex:

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

PRÜFUNG:

$tube_link = '<a href="http://www.youtube.com/watch?v=XA5Qf8VHh9I&amp;feature=g-all-u&amp;context=G2f50f6aFAAAAAAAADAA" target="_blank" rel="nofollow">http://www.youtube.com/watch?v=XA5Qf8VHh9I&amp;feature=g-all-u&amp;context=G2f50f6aFAAAAAAAADAA</a>'; 
$search = '#<a(.*?)(?:href="https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch\?v=))([\w\-]{10,12}).*$#x'; 
$replace = '<iframe width="150" height="84" src="http://www.youtube-nocookie.com/embed/$2"></iframe>'; 
$embed_code = preg_replace($search, $replace, $tube_link); 
var_dump($embed_code); 

OUTPUT:

string(97) "<iframe width="150" height="84" src="http://www.youtube-nocookie.com/embed/XA5Qf8VHh9I"></iframe>" 
+0

Thnx, genau wonach ich gesucht habe. –

+0

Gern geschehen, froh, dass es geklappt hat. – anubhava

+0

Wie würden Sie das für Youtube-Links tun, die am Ende Hashes für das Timing haben? ZB: "http://www.youtube.com/watch?v=jECIv7zlD4c&feature=player_embedded#t=30s" – Luc

0

, wenn Sie sicher sind, dass YouTube-Link gültig ist, können Sie einfach Verwenden Sie das einfache Formular

$search = '/^.*?v=(\w*?)&.*$/'; 

mit Ersatz $1.

See example here!

Oder fügen .*$ am Ende Ihres Musters alles bis zum Ende der Zeichenkette zu markieren.

+0

Thnx für Ihre Antwort. Nicht genau was ich suchte, aber trotzdem nützlich. –