Привет, я пытаюсь преобразовать ссылки youtube в код вставки.
это то, что у меня есть:
<?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; ?>
Он работает для одной ссылки. Однако, если я добавлю два, он заменит только последнее событие. Что мне нужно изменить?
Вы не правильно обрабатываете конец строки. Удалите $
и замените его закрывающим тегом </a>
. это исправит это.
$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);
Попробуйте следующее: preg_replace($search, $replace, $text, -1);
Я знаю, что это дефолт, но кто знает …
EDIT Попробуйте, если не работает;
do{ $text = preg_replace($search, $replace, $text, -1, $Count); } while($Count);
Вот регулярное выражение более эффективно: http://pregcopy.com/exp/26 , tralate это для PHP: (добавьте модификатор s)
<?php $text = $post->text; $search = '#<a (?:.*?)href=["\\\']http[s]?:\/\/(?:[^\.]+\.)*youtube\.com\/(?:v\/|watch\?(?:.*?\&)?v=|embed\/)([\w\-\_]+)["\\\']#ixs'; $replace = '<center><iframe width="560" height="315" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe></center>'; $text = preg_replace($search, $replace, $text); echo $text; ?>
Попробуй это