Как подставить домен к картинке при условия отсутствия https, http?

Dima83

Новичок
Извлекаем первую картинку из description, если её там нет то из text, если в тексте нет то с поля icon. В поле icon в любом случае она есть. Через getimagesize, получаем width height. Чтобы функция сработала как надо. Нужно чтобы у картинки был полный путь, например.
Но встречаются в базе картинки, у которых путь, вот такой.
Это тоже правильно. Домен сайта сам подставляется если изображение в тексте, но вывести width и height через getimagesize уже не получается.

Как с помощью регулярных выражений проверять строку на причастность https и http, если эти протоколы отсутствуют в ссылке-картинки то подставлять название сайта?

Вот код (использовал simple_html_dom.php, чтобы получить первое изображение).
PHP:
function imgShared($t,$date)
{
   global $dbh;
   try {
           $query = "SELECT * FROM data WHERE title_alt='$t' AND date='$date'";
           $STH = $dbh->prepare($query);
           $STH->execute();
        
              }
              catch(PDOException $e) {
                echo "2 Обнаружена ошибка. Напишите администратору. $email<br>";
                file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
              }
           $item = $STH->fetch(PDO::FETCH_ASSOC);



    $html = str_get_html($item["description"]);
    $url = $html->find('img',0)->src;

    if($url===null)
    {

           $html = str_get_html($item["text"]);//загружаем HTML-код
           $url = $html->find('img',0)->src;
           if($url === null)
           {
               $url = $item["icon"];
           }
    }
    else
    {
      $url = $html->find('img',0)->src;
    }
  
    list($width, $height) = getimagesize($url);
  
    $img = array("src"=>$url,"width"=>$width,"height"=>$height);
    return $img;
}
 

WMix

герр M:)ller
Партнер клуба
Код:
php >  print_r(parse_url('./hello/world.html'));
Array
(
    [path] => ./hello/world.html
)
php >  print_r(parse_url('//hello/world.html'));
Array
(
    [host] => hello
    [path] => /world.html
)
php >  print_r(parse_url('http://hello/world.html'));
Array
(
    [scheme] => http
    [host] => hello
    [path] => /world.html
)
php >
 

Dima83

Новичок
Вообще-то я предполагал, что мне покажут несколько примеров с preg_match. Вот нашел в интернете.

PHP:
echo "<br>";

$url = "https://mysite.ru/images/1642844045.jpg";

if (preg_match("/^(http:\/\/|https:\/\/)*[а-яА-ЯёЁa-z0-9\-_]+(\.[а-яА-ЯёЁa-z0-9\-_]+)+(\/\S*)*$/iu", $url) ) {
  echo 'true';
}
else echo 'false';

echo "<br>";
$url = "https://mysite.ru/images/1642844045.jpg";
preg_match('@^(?:https://|http://)?([^/]+)@i',
    $url, $matches);
$host = $matches[1];


if($host=='mysite.ru')
{
  echo "true";
}
else
{
  echo "false";
}
 

WMix

герр M:)ller
Партнер клуба
я понимаю, что в куче текста, url имеет смысл искать регулярными выражениями. но у тебя url уже на руках. тебе его просто разобрать нужно
 

Dima83

Новичок
Спасибо, что объяснили, а то я не понимал чем отличается preg_match от parse_url.
 
Сверху