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

Publié par luckyboy dans CMS

ont voir rien pas de code!!!!

Publié par web agency cms Typo3 dans tuto

De nombreux articles sur le web parlent des CMS (Content Management System) et tentent de lister les meilleurs d'entres-eux.
Mais très souvent, sauf quelques rares libres blancs, ces article...

Publié par jadu dans tuto

Et comment met-on en route Xinha lorsque l'extension a été chargée dans Firefox ?????

je n'ai rien trouvé !!!

Publié par MeepMeep dans tuto

Attention, un petit correctif a apporter :
headerContent-type: $header_contenttype charset: UTF-8
Remplacer charset: UTF-8 par charsetUTF-8
La difference est subtile mais susceptible d'etre m...

Publié par Fobec dans logiciel

prise en charge du format ipV6. L'api est compatible avec tous les ip qu'elles soient au format ipV4 ou ipV6.