IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

HTML Discussion :

[HTML] Forme des liens dans les pages html et autres [Fait]


Sujet :

HTML

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Par défaut [HTML] Forme des liens dans les pages html et autres
    Bonjour,

    j'aimerais savoir si les liens dans les pages html se présentent toujours sous la forme "a href", soit en expressions régulières:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a[^>]*href="([^"]*)"[^>]*>([^<]*)</a>
    (premiere parenthèse-->url, deuxième parenthèse-->texte)

    oui s'il y a d'autres possibilités (excepté les balises img bien sur)?

    Même question pour les autres types de pages (excepté fichiers flash .swf)?

    Je pose cette question car je veux faire un programme php qui va aller chercher les liens présents dans des pages internet (html ou autre?)

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 92
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Par défaut
    Bonjour,
    que je sache il y a plusieurs formes possibles suivant que c'est un lien HTTP, FTP, mailto ou greoupe de news comme ci-dessous




    Perso, je n'en sais pas davantage


    A+

  3. #3
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    salut,
    certains liens renvoient dans une partie d'un document (les ancres) dans ce cas la on a
    où l'ancre a été défini avec

    je trouve ton projet très intéressant, si tu veux fais le moi savoir quand ça seras prêt.

    Merci

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 92
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Par défaut
    Oui, pour être encore plus précis, on peut écrire un lien du genre :



    dans lequel la page est suivie de la balise interne à la page (#lien_interne)

    A+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Par défaut
    Merci pour vos réponses!

    Ok thes32, je te ferai savoir quand j'aurais fini. Cette question fait partie d'un un peu plus gros projet dont j'ai parlé à un autre endroit de ce forum ici:
    http://www.developpez.net/forums/sho...81#post3074781

    Comme personne n'est intervenu pour dire que ca existait déjà et que j'ai été encouragé, j'ai décidé de m'y mettre!

    Je laisse la question ouverte des fois qu'un vieux bourlingueur de la programmation web connaisse une autre façon de faire des lien

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Par défaut
    Bonjour Thes32,

    J'ai terminé la partie de mon projet qui concerne la détection de liens dans une page html, je te donnes le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    function get_link($string,$baseurl=""){
    $url=array();
    $urltexte=array();
    $urlext=array();
    $len=strlen($string);
    $pos=-1;
    $base=ereg_replace("(/$)|(/[^/]*\.[^/]*$)","",$baseurl)."/";
    $nextbasepos=strpos($string,"<base");
    while ((($pos=strpos($string,"<a",$pos+1))!==false) && (($pos2=strpos($string,'>',$pos+1))!==false) && (($pos3=strpos($string,"<",$pos2+1))!==false)){
    $str=substr($string,$pos,$pos3-$pos+1);
     
    while (($nextbasepos!==false) && ($nextbasepos < $pos)){
    if ((($pos4=strpos($string,">",$nextbasepos+1))!==false)
    && ereg('href[ ]*=[ ]*"[ ]*(http://[^"]*)"',substr($string,$nextbasepos,$pos4-$nextbasepos+1),$arr)) $base=ereg_replace("(/$)|(/[^/]*\.[^/]*$)","",trim($arr[1]))."/";
    $nextbasepos=$pos4 ? strpos($string,"<base",$pos4) : false;
    }
     
    $pos=$pos3;
    if (ereg('href[^"]*"[ ]*([^"#][^"]*)"[^>]*>([^<]*)<',$str,$arr)){
    $http=(substr(trim($arr[1]),0,7)==="http://");
    array_push($url,($link=$http ? trim($arr[1]) : $base.ereg_replace("^/","",trim($arr[1]))));
    array_push($urltexte,$arr[2]);
     
    array_push($urlext,ereg("[^?#]*[^/?#]/[a-zA-Z0-9_.\-]+(\.[a-zA-Z0-9]+)(\?|#|$)",$link,$arr2) ? $arr2[1] : "");
    }
    }
     
    return array($url,$urltexte,$urlext);
    }
    et j'ai rédigé un petit tuto içi:
    http://www.idees-et-solutions.fr/idees.php?page=id163

    cette fonction semble bien marcher pour l'instant. J'ai aussi crée une autre fonction que tu trouveras à la suite qui permet de détecter les liens dans les balises <a href="..."> mais aussi les URL qui ne sont pas en lien (tout ce qui commence par http:// ou par www.)

    Voila! A+

  7. #7
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    salut lysandre
    Très bon tuto! je recopie le code pour l'instant je peux pas le tester, je vois que tu t'en sors très bien avec les expressions régulières.

    Bon Courage continue avec tes excellentes idées!!

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Par défaut
    Merci thes32!

    J'ai modif la fonction pour qu'elle interprète les liens exactement comme un navigateur (firefox, qui semble avoir une meilleure interprétation que i.e.)
    Pour la petite explication, si tu collectes un lien dans une page html, le lien peut être en relatif et la facon de compléter ce lien peut dépendre des balises <base>. La fonction complète donc les liens de la même manière qu'un navigateur (j'ai choisi firefox).

    Dc utilises plutot ce nouveau code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    function get_link($string,$inibase1=""){
    $url=array();
    $urltexte=array();
    $urlext=array();
    $len=strlen($string);
    $pos=-1;
    $debut=strtok($inibase1,"#?");
    $inibase1=ereg("^http://[^/]*",$debut) ? $debut."/".substr($inibase1,strlen($debut)) : $inibase1;
    $inibase2=ereg_replace("^(http://.+)/[^/]*$","\\1",
    ereg_replace("^http://[/]*","http://",$debut))."/";
    $inibase3=ereg_replace("^(http://[^/]+)/.*","\\1",$inibase2)."/";
    $base1=$inibase1;$base2=$inibase2;$base3=$inibase3;
    $nextbasepos=strpos($string,"<base");
    while ((($pos=strpos($string,"<a ",$pos+1))!==false) && (($pos2=strpos($string,'>',$pos+1))!==false) && (($pos3=strpos($string,"<",$pos2+1))!==false)){
    $str=substr($string,$pos,$pos3-$pos+1);
    while (($nextbasepos!==false) && ($nextbasepos < $pos)){
    if ((($pos4=strpos($string,">",$nextbasepos+1))!==false)
    && ereg('href[ ]*=[ ]*"[ ]*(http:[^"]*)"',substr($string,$nextbasepos,$pos4-$nextbasepos+1),$arr)){
    $basex=trim($arr[1]); $base1=((substr($basex,0,7)==="http://") ? $basex : ((substr($basex,0,6)==="http:/") ? $inibase3.substr($basex,6) : $inibase2.substr($basex,5)));
    $debut=strtok($base1,"#?");
    $base1=ereg("^http://[^/]*",$debut) ? $debut."/".substr($base1,strlen($debut)) : $base1;
    $base2=ereg_replace("^(http://.+)/[^/]*$","\\1",
    ereg_replace("^http://[/]*","http://",$debut))."/";
    $base3=ereg_replace("^(http://[^/]+)/.*","\\1",$base2)."/";
    }
    $nextbasepos=$pos4 ? strpos($string,"<base",$pos4) : false;
    }
    $pos=$pos3;
    if (ereg('href[^"]*"[ ]*([^"]*)"[^>]*>([^<]*)<',$str,$arr)){
    $http=(substr(trim($arr[1]),0,7)==="http://");
    $root=(substr(trim($arr[1]),0,1)==="/");
    $self= !trim($arr[1]) || (substr(trim($arr[1]),0,1)==="#");
    array_push($url,($link=($http ? trim($arr[1]) : ($self ? strtok($base1,'#').trim($arr[1]) : ($root ? $base3.substr(trim($arr[1]),1) : $base2.trim($arr[1]))))));
    array_push($urltexte,$arr[2]);
     
    array_push($urlext,ereg("[^?#]*[^/?#]/[a-zA-Z0-9_.\-]+(\.[a-zA-Z0-9]+)(\?|#|$)",$link,$arr2) ? $arr2[1] : "");
    }
    }
     
    return array($url,$urltexte,$urlext);
    }

  9. #9
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Je le prend en compte

    Merci encore

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Par défaut
    Citation Envoyé par thes32 Voir le message
    Je le prend en compte

    Merci encore
    Pas de quoi!

  11. #11
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    pour en rajouter : il existe les pseudo-url qui sont de cette forme par exemple :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="javascript:fonctionJS('param1', 'param2', this)">le lien</a>
    (les paramètres ne sont pas tous entre guillemets)
    De plus la balise a n'a pas que l'attribut href : il existe également
    - style="...."
    - title="info-bulle"
    - class="classeAppliqueeSurA"
    - id="idA"
    etc. et tu peux placer ces attributs dans n'importe quel ordre.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Par défaut
    Citation Envoyé par Auteur Voir le message
    pour en rajouter : il existe les pseudo-url qui sont de cette forme par exemple :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="javascript:fonctionJS('param1', 'param2', this)">le lien</a>
    (les paramètres ne sont pas tous entre guillemets)
    Ca je ne sais pas si on peut y faire grand chose...? Je suppose que la plupart du temps quand on utilise le javascript pour retourner un lien, c'est pour prendre en compte l'action de l'utilisateur, donc ca dépend de parametres rentrés par l'utilisateur...?

    Citation Envoyé par Auteur Voir le message
    De plus la balise a n'a pas que l'attribut href : il existe également
    - style="...."
    - title="info-bulle"
    - class="classeAppliqueeSurA"
    - id="idA"
    etc. et tu peux placer ces attributs dans n'importe quel ordre.
    Oui ca j'ai deja pris en compte.

    Merci Auteur!


    Voici la derniere version de mon code, ou j'ai pris en compte les balises étant rédigées en majuscule ou en mélange (<A HreF= )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    function get_link($string,$inibase1=""){
    $url=array();
    $urltexte=array();
    $urlext=array();
    $string2=strtolower($string." .");
    $len=strlen($string);
    $pos=-1;
    $debut=ereg("^(#|\?)",$inibase1) ? "" : strtok($inibase1,"#?");
    $file=ereg("[^/]/[a-zA-Z0-9_.\-]+(\.[a-zA-Z0-9]+)$",$debut);
    $inibase1=eregi("^http://[^/]*",$debut) ? $debut.($file ? "" : "/").substr($inibase1,strlen($debut)) : $inibase1;
    $inibase2=eregi_replace("^(http://.+)/[^/]*$","\\1",
    eregi_replace("^http://[/]*","http://",$debut))."/";
    $inibase3=eregi_replace("^(http://[^/]+)/.*","\\1",$inibase2)."/";
    $base1=$inibase1;$base2=$inibase2;$base3=$inibase3;
    $nextbasepos=strpos($string2,"<base");
    while ((($pos=strpos($string2,"<a ",$pos+1))!==false) && (($pos2=strpos($string2,'>',$pos+1))!==false) && (($pos3=strpos($string2,"<",$pos2+1))!==false)){
    $str=substr($string,$pos,$pos3-$pos+1);
    while (($nextbasepos!==false) && ($nextbasepos < $pos)){
    if ((($pos4=strpos($string2,">",$nextbasepos+1))!==false)
    && eregi('href[ ]*=[ ]*"[ ]*(http:[^"]*)"',substr($string2,$nextbasepos,$pos4-$nextbasepos+1),$arr)){
    $basex=trim($arr[1]); $base1=((substr($basex,0,7)==="http://") ? $basex : ((substr($basex,0,6)==="http:/") ? $inibase3.substr($basex,6) : $inibase2.substr($basex,5)));
    $debut=ereg("^(#|\?)",$base1) ? "" : strtok($base1,"#?");
    $file=ereg("[^/]/[a-zA-Z0-9_.\-]+(\.[a-zA-Z0-9]+)$",$debut);
    $base1=eregi("^http://[^/]*",$debut) ? $debut.($file ? "" : "/").substr($base1,strlen($debut)) : $base1;
    $base2=eregi_replace("^(http://.+)/[^/]*$","\\1",
    eregi_replace("^http://[/]*","http://",$debut))."/";
    $base3=eregi_replace("^(http://[^/]+)/.*","\\1",$base2)."/";
    }
    $nextbasepos=$pos4 ? strpos($string2,"<base",$pos4) : false;
    }
    $pos=$pos3;
    if (eregi('href[^"]*"[ ]*([^"]*)"[^>]*>([^<]*)<',$str,$arr)){
    $http=(strtolower(substr(trim($arr[1]),0,7))==="http://");
    $root=(substr(trim($arr[1]),0,1)==="/");
    $self= !trim($arr[1]) || (substr(trim($arr[1]),0,1)==="#");
    array_push($url,($link=($http ? trim($arr[1]) : ($self ? strtok($base1,'#').trim($arr[1]) : ($root ? $base3.substr(trim($arr[1]),1) : $base2.trim($arr[1]))))));
    array_push($urltexte,$arr[2]);
     
    array_push($urlext,ereg("[^?#]*[^/?#]/[a-zA-Z0-9_.\-]+(\.[a-zA-Z0-9]+)(\?|#|$)",$link,$arr2) ? $arr2[1] : "");
    }
    }
     
    return array($url,$urltexte,$urlext);
    }

  13. #13
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Citation Envoyé par lysandre Voir le message
    Ca je ne sais pas si on peut y faire grand chose...? Je suppose que la plupart du temps quand on utilise le javascript pour retourner un lien, c'est pour prendre en compte l'action de l'utilisateur, donc ca dépend de parametres rentrés par l'utilisateur...?
    En fait les pseudo-url sont utilisées pour éviter de gérer un onclick tout en bénéficiant des propriétés de la balise a (forme du curseur, couleur des liens entre autres).

Discussions similaires

  1. [HTML] mettre des URLS dans mes pages HTML
    Par reneguenon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 09/06/2009, 23h02
  2. Récupérer des info dans une page html
    Par DORBRITZ dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 06/03/2008, 11h13
  3. Récupérer des données dans une page HTML
    Par newdelirium dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2005, 19h18
  4. Réponses: 7
    Dernier message: 14/09/2005, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo