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

Vue hybride

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    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 éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    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.

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    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 expérimenté 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
    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 éprouvé 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
    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 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    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 confirmé
    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
    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 émérite Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    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);

  9. #9
    Membre confirmé
    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
    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 émérite Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    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

+ 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