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

Publié par BOKOMBEJEAN dans java

code source excellente,
maintenant comment l'afficher dans une zone de texte ou un champ de texte?

Publié par caledonien dans php5

merci c'est parfait

Publié par mohinfo dans CMS

je vous demande un mini projet delphi pour gérer la base de donnée

Publié par fobec dans logiciel

Bravo, le soft a trouvé quelques 2400 liens sur le site en un temps record.

Publié par Roger HENRI dans CMS

Je ne suis pas sûr que cette procédure marche toujours parfaitement à cause du mot
"selstart" qui, chez moi au moins, paraît être capricieux.

Quand je veux lir...