Publié le 22/10/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Construire un lien absolu a partir d'une URL relative

Sur un site internet, les liens sont insérer dans le code HTML et peuvent s'écrire sous forme de lien absolu ou sous forme de lien relatif. Le navigateur internet comprend parfaitement les manières d'écrire un lien internet. Lorsque l'on veut analyser l'arborescence d'un site web, les url relatives sont étendues à la syntaxe complète pour pouvoir faire des tri ou extraire les liens externes.

Passer d'un lien relatif à un lien absolu

En parsant une source HTML avec DOMDocument, on se rend compte que les liens prennent les formats suivants:
- url absolue: ce sont des adresses URL complètes, incluant le protocole de serveur (en généralement http://),
exemple: http://monsite.com/index.php
- url relative: les adresses sont indiquées par rapport au dossier contenant le document source.
exemple: ../image/graph.jpg
La class AbsoluteURL est un exemple comment passer d'un lien relatif vers un lien absolue.
<?php
/**
 * Construire une URL absolue
 * fobec 2010
 */
class AbsoluteURL {
 
    public static function merge($absolute, $relative) {
        $p = parse_url($relative);
        if(isset($p["scheme"])&&$p["scheme"])return $relative;
 
        extract(parse_url($absolute));
        $path = dirname($path);
        if($relative{0} == '/') {
            $cparts = array_filter(explode("/", $relative));
        }
        else {
            $aparts = array_filter(explode("/", $path));
            $rparts = array_filter(explode("/", $relative));
            $cparts = array_merge($aparts, $rparts);
            foreach($cparts as $i => $part) {
                if($part == '.') {
                    $cparts[$i] = null;
                }
                if($part == '..') {
                    $cparts[$i - 1] = null;
                    $cparts[$i] = null;
                }
            }
            $cparts = array_filter($cparts);
        }
        $path = implode("/", $cparts);
        $url = "";
        if($scheme) {
            $url = "$scheme://";
        }
        if(isset($user)&&$user) {
            $url .= "$user";
            if($pass) {
                $url .= ":$pass";
            }
            $url .= "@";
        }
        if($host) {
            $url .= "$host/";
        }
        $url .= $path;
        return $url;
    }
}
/**
 * Exemple
 */
 
$url = "http://www.monsite.com/beta/index.html";
$rel = "./images/graph.jpg";
echo AbsoluteURL::merge($url, $rel);
?>

Test d'assemblage d'url

La première étape consiste à détecter le protocole de communication, puis le nom de domaine. A partir de ces données, la class y ajoute le répertoire courant et l'url relative.

Tests d'assemblage d'URL
AbsoluteURL::merge("http://www.monsite.com/beta/index.html", "./images/graph.jpg");
=> resultat: http://www.monsite.com/beta/images/graph.jpg

AbsoluteURL::merge("http://www.monsite.com/beta/index.html", "../images/graph.jpg");
=> resultat: http://www.monsite.com/images/graph.jpg
fgdgf


Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - class
Mise a jour
22/10/2010
Visualisation
vu 3557 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par makanaki dans logiciel

je veux essayer ce logiciel pour tester les jeux de loto de chez nous

Publié par D&Atilde;&copy;butant dans CMS

merci , et bon courage pour d'autre programme

Publié par traitstone dans CMS

c'est bou et tres bon chose

Publié par traitstone dans CMS

c'est bou et tres bon chose

Publié par gilles dans logiciel

Bonjour,

j'utilise quotidiennement votre excellent logiciel complet et ergonomique.

Mais depuis quelques jours j'ai un probleme il recherche indefiniment resolution du nom de l'hote.