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

Langage PHP Discussion :

faire un lien depuis une URL postée [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Par défaut faire un lien depuis une URL postée
    Bonsoir @ tous,

    Je souhaite une fois que j'ai récupérer le contenu d'un post afficher le résultat. Et si dans le contenu, il y a une URL, je souhaite la rendre cliquable.

    jusqu'ici tout va bien et voila ce que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sHtml = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\" class=\"lien\" target=\"_blank\">\\0</a>", $sHtml);
    Dans ce cas si l'on envoie http://www.bob.fr, ca le transforme en lien.
    Moi ce que je voulais c'est que cela fasse la meme chose si l'on envoie que www.bob.fr alors j'ai esayer de faire de couplé le code ci-dessus avec un autre ereg_replace : "www[^<>[:space:]]+[[:....." mais evidement ca se mélange les pinceaux.

    Donc si vous aviez une solution à mon problème, ce serait génial...
    Merci

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Bonjour,

    Tu peux rendre, dans ton pattern, le http:// comme étant facultatif et devant apparaître 0 ou 1 fois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    $sHtml = "http://www.developpez.com";
    echo "Avec http : " . $sHtml . "<br/>";
    $sHtml = ereg_replace("([[:alpha:]]+://)?[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\" class=\"lien\" target=\"_blank\">\\0</a>", $sHtml);
    echo "Avec http (apres conversion) : " . $sHtml . "<br/>";
    $sHtml = "www.developpez.com";
    echo "Sans http : " . $sHtml . "<br/>";
    $sHtml = ereg_replace("([[:alpha:]]+://)?[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\" class=\"lien\" target=\"_blank\">\\0</a>", $sHtml);
    echo "Sans http (apres conversion) : " . $sHtml . "<br/>";
    ?>
    Par contre ca semble poser un problème, chez moi le lien n'est pas valide s'il n'y a pas http:// devant.
    dans ce cas il faut a mon avis que tu fasses plusieurs cas mais sans les combiner. Tu detectes dans quel cas tu es par un preg_match (http://www ou http:// sans www, ou encore juste www.) et ensuite tu fais ton ereg_replace()

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Par défaut
    Je me doutais que ce ne serait pas si simple que ca... Et puis les expressions régulières et moi, ca fait plusieurs !
    Je vais essayer de chercher une solution.

    En tout cas merci.
    Schuss

  4. #4
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    Essaye celle la :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace('#([a-z]+://)?(www.)?[a-z0-9-_]+\.[a-z]{2,4}(?:[^.]+\.[a-z0-9]+)?#i', '<a href="$0" class="lien" target="_blank">$0</a>', $sHtml);

    Si elle te convient, je pourrais toujours te l'expliquer

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 213
    Par défaut
    Merci Korco,


    Afin d'y apporter la denière modifcation qui me donnera entière satisfaction : transformer tous les www. en http://www. dans le href pour que tous les liens fonctionnent.
    Je veux bien que tu m'expliques le fonctionnement de cette expression régulière. Voici ce que je pense avoir compris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_replace('#([a-z]+://)?(www.)?[a-z0-9-_]+\.[a-z]{2,4}(?:[^.]+\.[a-z0-9]+)?#i', '<a href="$0" class="lien" target="_blank">$0</a>', $sHtml);
    ([a-z]+://)?(www.) pour tout ce que commence par http:// ou www.

    euh et après j'suis largué

  6. #6
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    Korko stp ^^

    Tien voila (jlai amélioré)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    preg_replace_callback('#([a-z]+://)?(?:www.)?[a-z0-9-_]+(?:\.[a-z]{2,4})+/?(?:[a-z0-9-_%/]+\.[a-z0-9]+)?(?:\?[^\s]*)?#i', 'make_link', $sHtml);
     
    function make_link($match)
    {
    	return '<a href="'.(empty($match[1])) ? 'http://'.$match[0] : $match[0].'" class="lien" target="_blank">'.$match[0].'</a>';
    }
    Pour l'explication, la voila :
    Tout dabord, les # #i sont juste la pour encadrer l'expression et le i veux dire que si tu met un A au lieu d'un a ça fonctionne aussi.
    Ensuite, les (?: ) c'est pour délimiter une zone (qui permet d'utiliser le ? pour 0 ou 1, le * pour 0 ou plus et le + pour 1 ou plus

    ([a-z]+://)? => n'importe quelle suite de lettre suivies de "://" ce qui inclu http:// ftp:// https:// et j'en passe. C'est optionnel (le ?)
    (www.)? => La chaine "www." optionnelle
    [a-z0-9-_]+ => n'importe quelle suite de lettre, chiffres, tiret et tiret bas
    (\.[a-z]{2,4})+ => Nom de domaine : un point suivi d'une suite de 2 à 4 lettre (de .fr le plus court à .info le plus long), attention en cas de .fr.st par exemple
    [a-z0-9-_%/]+ => une suite quelconque de lettres, de chiffres, de % de tiret, de tiret bas et de slash.
    \.[a-z0-9]+ => l'extension si jamais c'est un fichier a savoir un point suivi d'une suite de lettres ou de chiffres
    \?[^\s]* => les parametres passés au fichier exemple à savoir une suite de caractères jusqua un espace : ?toto=truc&machin=truc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/06/2015, 12h38
  2. [FLASH 8] Charger dynamiquement des bmp depuis une url
    Par matN59 dans le forum Intégration
    Réponses: 1
    Dernier message: 24/04/2006, 16h24
  3. Recupération de données XML depuis une URL
    Par tonymo dans le forum Format d'échange (XML, JSON...)
    Réponses: 27
    Dernier message: 21/11/2005, 14h48
  4. Liens depuis une base de donnée statique
    Par LucG dans le forum Access
    Réponses: 4
    Dernier message: 26/10/2005, 12h12
  5. [Excel] Faire des liens internes à une feuille
    Par Invité dans le forum Excel
    Réponses: 1
    Dernier message: 25/08/2005, 13h04

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