Компонент DomCrawler облегчает навигацию по DOM для документов HTML и XML. Большинство разработчиков используют его в функциональных тестах своих приложений Symfony, но вы можете использовать его для создания реального сканера.
При создании сканера обычно необходимо превратить ссылки содержимого HTML, которые обычно являются относительными, в абсолютные URL-адреса для продолжения сканирования всего сайта. Например, если URL-адрес сайта — https://example.com/foo
, а URL-адрес ссылки — ../bar?foo=1
, абсолютный URL-адрес — https://example.com/bar?foo=1
.
Это преобразование намного сложнее, чем кажется, потому что вам приходится иметь дело с якорями, параметрами строки запроса и всевозможными подпутями. Компонент DomCrawler уже содержал логику для разрешения этих URL-адресов, но в Symfony 5.1 извлекли его в новый класс UriResolver
, чтобы вы могли повторно использовать логику в своих приложениях:
use Symfony\Component\DomCrawler\UriResolver;
$absoluteUrl = UriResolver::resolve('../bar?foo=1', 'https://example.com/foo');
// $absoluteUrl = 'https://example.com/bar?foo=1'