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 3250 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 263 articles
|BIO_PSEUDO|
Commentaires récents

Publié par space dans java

peut on avoir un meme code pour linux

Publié par Helo dans java

SVP Comment faire fonctionner le bouton pause ?

Publié par Fobec dans tuto

Merci pour la remarque Toluar,
Les user-agent sont effectivement un bon indicateur pour les utilisateurs. Les crawlers et robots en tout genre ne prennent pas toujours la peine de renseigner cette...

Publié par hungerGames dans php5

Salut!
je suis un debutant en php,et lorsque j'ai execute le code
sur la creation de la base 'member',on m'a affiche cet message:
"Undefined class constant 'ATT_ERRMOD...

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

merci , et bon courage pour d'autre programme