Normalizzazione dei percorsi assoluti durante l'analisi in PHP
Quando si analizzano i siti web, di solito abbiamo bisogno di ottenere gli indirizzi dei link, i percorsi per le immagini, i file CSS e JavaScript.
Per i nostri scopi, sarebbe conveniente che questi indirizzi contengano l'URL completo insieme al nome di dominio, più o meno così:
<a href="http://targ.loc/dir/sub/page.html">text</a>
Nella vita reale, tuttavia, il nome di dominio nei percorsi di un sito è solitamente omesso e i percorsi appaiono più o meno così (con la barra all'inizio):
<a href="/dir/sub/page.html">text</a>
Eseguiamo la normalizzazione di un tale percorso. Supponiamo che in una variabile sia memorizzato il dominio a cui ci stiamo rivolgendo:
<?php
$domain = 'http://targ.loc';
?>
Supponiamo anche di aver estratto il percorso dall'attributo
href del link:
<?php
$href = '/dir/sub/page.html';
?>
Eseguiamo la sua normalizzazione:
<?php
$norm = $domain . $href;
?>
Ottenete tutti gli attributi href sulla pagina e
eseguite la loro normalizzazione:
<a href="/page.html">text</a>
<a href="/dir/page.html">text</a>
<a href="/dir/sub/page.html">text</a>
Ottenete tutti gli attributi href sulla pagina e
eseguite la loro normalizzazione, dove necessario:
<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>
Ottenete tutti gli attributi src sulla pagina e
eseguite la loro normalizzazione, dove necessario:
<img src="/img.png">
<img src="/images/img.png">
<img src="http://targ.loc/images/img.png">
Ottenete tutti i percorsi ed eseguite la loro normalizzazione:
<link rel="stylesheet" href="/styles.css">
<script src="/scripts.js"></script>
Ottenete tutti i percorsi ed eseguite la loro normalizzazione:
div {
background: url('/images/img.png');
}
Ottenete tutti i percorsi ed eseguite la loro normalizzazione:
div {
background: url(/img.png);
background: url('/images/img.png');
background: url("/images/img.png");
background: url("http://targ.loc/images/img.png");
}