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 :

[Système] Remplacer une chaine par un lien hypertexte [FAQ]


Sujet :

Langage PHP

  1. #1
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut [Système] Remplacer une chaine par un lien hypertexte
    Bonjour,

    J'ai mis en place sur le site que je suis en train de créer un système de blog. Donc n'importe qui peut ajouter des commentaires aux articles présents sur le site.

    J'aimerais que lorsqu'un commentaire contient un texte du genre http://adresse.ext ou www.adresse.ext ce texte se transforme automatiquement en lien vers ces pages.

    J'ai essayé la fonction ereg_replace mais elle ne fait pas ce que je veux, ou je ne sais pas m'en servir pleinement ...

    Avez-vous une idée ?

    Merci.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Points : 195
    Points
    195
    Par défaut
    On peut voir ce que tu as essaye d ecrire avec le ereg_replace?
    Perso, je vais pas pouvoir t aider (j y connais rien pour le remplacement), mais si tu detailles ce que tu as fait, ca pourra aider les autres qui viendront lire et t en diront beaucoup plus.
    La vie n'est qu'une succession d'éternels recommencements

  3. #3
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    J'ai fait un fichier test avec un commentaire qui contenait justement une adresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $sqlcomment = 'select * from commentaire where id_commentaire=13';
    $resultcomment = mysql_query($sqlcomment);
    $comment = mysql_fetch_array($resultcomment);
     
    $commentaire = nl2br($comment["contenu_commentaire"]);
     
    $remplace = '  ';
    $commentaire = ereg_replace('www', $remplace, $commentaire);
     
    echo $commentaire;
    Donc en fait j'essaye de voir si le texte contient les 3w, en revanche je ne sais pas par quoi le remplacer ..

  4. #4
    Membre actif Avatar de AlphaYoDa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 210
    Points
    210
    Par défaut
    J'ai utilisé ça moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $commentaire = eregi_replace("([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])","<A HREF=\"\\1://\\2\\3\" TARGET=\"_blank\">\\1://\\2\\3</A>",$commentaire );
    Mais je ne sais plus si il fonctionne aussi sans le 'http://' à voir.

    Tu peux en trouver ici
    http://www.phpinfo.net/regex/

  5. #5
    Membre habitué Avatar de tony montana
    Profil pro
    Inscrit en
    Février 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 114
    Points : 136
    Points
    136
    Par défaut
    salut,

    tu trouve des tas d'exemples sur le net, notamment dans les commentaires sur le site de php.net, pour la fonction ereg_replace

    notamment cette fonction qui transforme bien les adresses de la forme http://www.google.fr et www.google.fr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function hyperlink($text)
    {
       // match protocol://address/path/
       $text = ereg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a href=\"\\0\">\\0</a>", $text);
     
       // match www.something
       $text = ereg_replace("(^| )(www([.]?[a-zA-Z0-9_/-])*)", "\\1<a href=\"http://\\2\">\\2</a>", $text);
    return $text;
    }

  6. #6
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Merci à vous deux, je vais essayer de voir ce que ça donne.

    J'ai repris ta fonction tony montana et je l'ai un peu modifiée pour qu'elle fonctionne, en effet la deuxième affection ne fonctionnait pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function hyperlink($text) 
    { 
       // match protocol://address/path/ 
       $text = eregi_replace('[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*', '<a href="\\0">\\0</a>', $text); 
     
       // match www.something 
       $text = eregi_replace('(www([.]?[a-zA-Z0-9_/-])*)', '<a href="http://\\0">\\0</a>', $text); 
    return $text; 
    }
    Merci encore.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 89
    Points : 67
    Points
    67
    Par défaut
    La fonction hyperlink ci-dessus pose probleme lorsque l'url contient le caratere "%"

    Par exemple :
    http://fr.wikipedia.org/wiki/M%C3%BBrier_blanc

    ne fera le lien que sur :
    http://fr.wikipedia.org/wiki/M

    Débutant, ne maitrisant pas les expressions régulières, je ne sais pas comment corriger cette fonction.

    (pas testé avec les caracteres ? et & dans l'url).

    Quelqu'un peut m'aider? Merci !

  8. #8
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    Pour info preg_replace est bien plus rapide qu'ereg.
    Je t'ai refais la regex ave preg_replace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $result = preg_replace('#[a-zA-Z]+:\/\/(.*)(\?.*)#i', '<a href="$0">$1</a>',$text);
    If it's not broken, don't fix it.
    BiliBa Built on top of Zend Framework

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 89
    Points : 67
    Points
    67
    Par défaut
    et avec la fonction eregi_replace, quelle aurait du être la modification apportée? (pour ma culture générale)

  10. #10
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    Je sais pas, cela fait longtemps que je n'utilise plus ereg ;-)
    De plus les expression PCRE sont utilisee a peu pres partout (de java a javascript en passant par PERL mais ca c normal).
    Donc autant utiliser celles ci des maintenant
    If it's not broken, don't fix it.
    BiliBa Built on top of Zend Framework

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 89
    Points : 67
    Points
    67
    Par défaut
    merci qd meme !

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

Discussions similaires

  1. Regex pour remplacer une chaine par un lien
    Par lerorodu51 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/03/2014, 15h52
  2. [RegEx] Remplacer une chaine par un lien sans exploser les balises
    Par yahoowaloo dans le forum Langage
    Réponses: 5
    Dernier message: 19/07/2011, 11h39
  3. [RegEx] Remplacer une chaine par un graphique
    Par totof49 dans le forum Langage
    Réponses: 5
    Dernier message: 03/03/2009, 17h49
  4. Réponses: 3
    Dernier message: 11/09/2007, 17h58
  5. Réponses: 9
    Dernier message: 22/05/2006, 12h21

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