Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
608 views
in Technique[技术] by (71.8m points)

php - Swap all youtube urls to embed via preg_replace()

Hello I'm trying to convert youtube links into embed code.

this is what I have:

<?php

$text = $post->text;

     $search = '#<a(.*?)(?:href="https?://)?(?:www.)?(?:youtu.be/|youtube.com(?:/embed/|/v/|/watch?.*?v=))([w-]{10,12}).*$#x';
     $replace = '<center><iframe width="560" height="315" src="http://www.youtube.com/embed/$2" frameborder="0" allowfullscreen></iframe></center>';
     $text = preg_replace($search, $replace, $text);


echo $text;
?>

It works for one link. However if I add two, it will only swap the last occurrence. What do I have to change?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You're not handling the end of the string properly. Remove the $, and replace it with the closing tag </a>. this will fix it.

 $search = '#<a(.*?)(?:href="https?://)?(?:www.)?(?:youtu.be/|youtube.com(?:/embed/|/v/|/watch?.*?v=))([w-]{10,12}).*</a>#x';
 $replace = '<center><iframe width="560" height="315" src="http://www.youtube.com/embed/$2" frameborder="0" allowfullscreen></iframe></center>';
 $text = preg_replace($search, $replace, $text);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...