Intereting Posts
Экспорт деталей заказа magento Вставка значений в многомерный массив php Дата PHP () показывает дату завтрашнего дня Как автоматически обновить таблицу, когда другая таблица обновляется на другом сервере mysql? Сложность с объединением 3 таблиц в запросе в php Плагин Symfony sfDoctrineActAsTaggablePlugin не работает DOMDocument и XPath, URL не передан Хеширование пароля с использованием crypt не работает при входе в систему, на котором отображается неправильный пароль Как работает PHP-соединение с firebase? Почему мне нужно вызывать «exit» после перенаправления через заголовок («Location ..») в PHP? ZF2 пустой контейнер для сеансов между страницами PHP включает в себя пробел в верхней части страницы Общие вопросы по полному опросу / HTTP-потоку Как передать переменное количество аргументов функции PHP Удаление значений из базы данных MySQL с помощью AJAX без перезагрузки страницы (отредактировано)

Поменяйте все URL-адреса youtube, чтобы вставлять их через preg_replace ()

Привет, я пытаюсь преобразовать ссылки 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; ?> 

Попробуй это