Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как проверить ссылку

Короткий ответ

filter_var() с фильтром FILTER_VALIDATE_URL проверяет форму адреса:

<?php
 
var_dump(filter_var('https://example.com/path?q=1', FILTER_VALIDATE_URL) !== false);
var_dump(filter_var('example.com', FILTER_VALIDATE_URL) !== false);

Результат:

bool(true)
bool(false)

Только http и https

Фильтр пропускает и javascript:, и ftp:. Если ссылка будет выведена на странице, проверьте протокол:

<?php
 
function isWebUrl(string $url): bool
{
    return filter_var($url, FILTER_VALIDATE_URL) !== false
        && in_array(parse_url($url, PHP_URL_SCHEME), ['http', 'https'], true);
}
 
var_dump(isWebUrl('https://example.com'));
var_dump(isWebUrl('javascript://example.com/%0Aalert(1)'));

Результат:

bool(true)
bool(false)

Функции из этого ответа

  • filter_var — Проверяет или очищает значение по заданному правилу.
  • parse_url — Разбирает адрес на части.
  • in_array — Проверяет, есть ли значение в массиве.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.