Нормализация абсолютных путей при парсинге в 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");
}