Как проверить ссылку
Короткий ответ
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 — Проверяет, есть ли значение в массиве.