Нормализация абсолютных путей при парсинге в PHP

Когда осуществляется парсинг сайтов, нам как правило нужно получать адреса ссылок, пути к картинкам, CSS и JavaScript файлам.

Для наших целей было бы удобно, чтобы эти адреса содержали полный URL вместе с именем домена, примерно вот так:

<a href="http://targ.loc/dir/sub/page.html">text</a>

В реальной жизни, однако, доменное имя в путях на сайте принято опускать и пути выглядят примерно вот так (со слешем в начале):

<a href="/dir/sub/page.html">text</a>

Давайте выполним нормализацию такого пути. Пусть у нас в переменной хранится домен, к которому мы обращаемся:

<?php $domain = 'http://targ.loc'; ?>

Пусть мы также извлекли путь из href ссылки:

<?php $href = '/dir/sub/page.html'; ?>

Давайте выполним его нормализацию:

<?php $norm = $domain . $href; ?>

Получите все href на странице и выполните их нормализацию:

<a href="/page.html">text</a> <a href="/dir/page.html">text</a> <a href="/dir/sub/page.html">text</a>

Получите все href на странице и выполните их нормализацию, где это необходимо:

<a href="/page.html">text</a> <a href="/dir/page.html">text</a> <a href="/dir/sub/page.html">text</a> <a href="http://targ.loc/dir/sub/page.html">text</a>

Получите все src на странице и выполните их нормализацию, где это необходимо:

<img src="/img.png"> <img src="/images/img.png"> <img src="http://targ.loc/images/img.png">

Получите все пути и выполните их нормализацию:

<link rel="stylesheet" href="/styles.css"> <script src="/scripts.js"></script>

Получите все пути и выполните их нормализацию:

div { background: url('/images/img.png'); }

Получите все пути и выполните их нормализацию:

div { background: url(/img.png); background: url('/images/img.png'); background: url("/images/img.png"); background: url("http://targ.loc/images/img.png"); }



Чат с GPT Компилятор