seregazolotaryow64
@seregazolotaryow64
IT Специалист и самоучка

Как с помощью регулярного выражения добавить домен перед абсолютным путём к изображению?

На данный момент я разрабатываю RSS-канал новостей для этого сайта на PHP,MySQL и Yii.

И сама ссылка на канал

В коде сгенерируемого потока вы в содержимом одной из новости увидите код HTML-тега встроенный в CDATA и такой пример выглядит так:
<p><img alt="Церемония вручения инвентаря в стадионе 'Локомотив'(Саратов). 5 марта 2020" src="/media/images/news/uploads/mentalsport/IMG_20200311_103008.jpg" /></p>

<p><img alt="Церемония вручения инвентаря в стадионе 'Локомотив'(Саратов). 5 марта 2020" src="/media/images/news/uploads/mentalsport/IMG_20200311_102923.jpg" /></p>


В каждом параграфе - изображение, отвечающее за реализацию фоторепортажа после текста внутри текста новости и не все RSS-агрегаторы (десктопные и мобильные) это воспринимают.

Вопросы:

1. Как сделать так, чтобы все RSS-агрегаторы загружали в настраиваемом RSS-потоке все изображения с домена, где находится сам канал? Как перед путём добавить домен, где находится сам поток и сами изображения и получился вот такой код, правильно воспринимаемый всеми RSS-агрегаторами и читалками?
Нужный пример:
<p><img alt="Церемония вручения инвентаря в стадионе 'Локомотив'(Саратов). 5 марта 2020" src="https://good-adults.ru/media/images/news/uploads/mentalsport/IMG_20200311_103008.jpg" /></p>

<p><img alt="Церемония вручения инвентаря в стадионе 'Локомотив'(Саратов). 5 марта 2020" src="https://good-adults.ru/media/images/news/uploads/mentalsport/IMG_20200311_102923.jpg" /></p>


2.Имеется ли возможность сделать это с помощью функции preg_replace() в PHP? Для этого какое регулярное выражение существует, позволяющее проверить отсутствие строки https и самого домена в начале значения HTML-атрибута src в img и добавить https с доменом к началу значения атрибута src и перед путём к изображению внутри атрибута, как в моих примерах?
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
@dodo512
https://regex101.com/r/ynPMcj/3
preg_replace('#<img[^>]+src="\K/#i', 'https://site.ru/', $html);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега PHP
Вы разрабатываете сайт на YII2.
Чтобы добавить домен в пути к файлу не нужны регулярные выражения, даже если не пользоваться framework.
А в Вашем случае, с использованием YII,2 достаточно применить Url::to().
Вот два примера.
<img src="<?= Url::to('@web/' . '/' . $model->images[0]->path . '/' . $model->images[0]->file, true) ?>" alt="">
// and
echo Html::img(Url::to('@web' . '/' . $model->images[0]->path . '/' . $model->images[0]->file, true))

В итоге в путь к изображения будет подставлено доменное имя. Это достигается передачей второго параметра для Url::to();
http://site.ru/uploads/image.jpg
Если не передавать второй параметр или не использовать Url::to(), то путь к изображению будет без доменного имени
/uploads/image.jpg
Подробности в документации.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы