preg_replace youtube links - iframe嵌入

时间:2012-03-27 15:57:10

标签: php youtube preg-replace hyperlink

我正在尝试使用iframe嵌入代码替换包含a标签的youtube链接。 到目前为止我得到了什么:

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

结果:

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

我怎样才能摆脱剩下的:

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

日Thnx!

2 个答案:

答案 0 :(得分:3)

使用此正则表达式:

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

<强>测试

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

<强>输出:

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

答案 1 :(得分:0)

如果您确定YouTube链接有效,则可以使用简单的表单

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

替换 $1

See example here!

或者在模式的末尾添加.*$以标记所有内容,直到主题字符串结束。