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 du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Points : 68
    Points
    68
    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 : 91
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 78
    Points
    78
    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+
    On n'est riche que de ce qu'on donne

  3. #3
    Expert confirmé
    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
    Points : 4 853
    Points
    4 853
    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
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 78
    Points
    78
    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+
    On n'est riche que de ce qu'on donne

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Points : 68
    Points
    68
    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 du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Points : 68
    Points
    68
    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
    Expert confirmé
    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
    Points : 4 853
    Points
    4 853
    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!!
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Points : 68
    Points
    68
    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
    Expert confirmé
    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
    Points : 4 853
    Points
    4 853
    Par défaut
    Je le prend en compte

    Merci encore
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

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

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

    Merci encore
    Pas de quoi!

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    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 du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Points : 68
    Points
    68
    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 éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    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