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 :

URL cliquable à l'affichage [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 63
    Points : 70
    Points
    70
    Par défaut URL cliquable à l'affichage
    Bonjour à tous,

    Voilà, j'ai une fonction avec RegEx pour rendre des url ou adresse mail cliquable à l'affichage.

    Code php : 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
     
    function url_cliquable($string)
    {
    	// le texte ou l on va rendre les email et les urls cliquables
    	$in = array(
    	'`((?:https?|ftp)://\\S+)(\\s|\\z)`',
    	'`([[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*\.([a-z]{2,4}))`',
    	'`((?<!//)(www\.)\S+)(\s|\z)`'
    	);
     
    	$out = array(
    	'<a href="$1" target="_blank">$1</a>$2',
    	'<a href="mailto:$1">$1</a>',
    	'<a href="http://$1" target="_blank">$1</a>',
    	);
     
    	return preg_replace($in, $out, $string);
    }

    Cela marche impeccable, sauf sur une url du genre http://www.site.fr/1/www.site.fr/dossier/index.php

    Forcément il me détecte une url imbriqué, et me crée un deuxième lien html. A l'affichage, forcément ça ne passe pas

    J'ai jamais été doué en regex, si une âme charitable pouvait m'aider ...

    Merci !

  2. #2
    Invité
    Invité(e)
    Par défaut
    preg_replace avec 3 regex/remplacements est équivalent à faire 3 preg_replace consécutifs d'un point de vue fonctionnel. Donc, $in[2] ré-évaluera les changements faits par $in[0]. L'assertion "(?<!//)" dans $in[2] permet d'éliminer les conflits entre $in[0] et $in[2] sur un "http://www" ne contenant pas de www plus loin. Tu pourrais poursuivre en ajoutant "(?<!/)" pour résoudre ton exemple
    '`((?<!//|/)(www\.)\S+)`i'... mais ça ne résouderais pas un cas comme "http://exemple.com/my_www.dump/".

    Il est peut-être préférable de regarder le problème à l'envers. C'est à dire: quels sont les caractères pouvant précéder "www.\S+" pour transformer en lien. J'imagine que c'est un caractère blanc (\s) ou un début de chaine (^)...
    '`(?<=^|\s)(www\.\S+)`i'...

    J'ai toujours détesté les endroits qui ajoute la ponctuation à la fin de l'url la rendant inutilisable, alors que [^\s[:punct:]] forcerais une non-ponctuation pour finir la capture... $in[2] pourrait avoir cette tête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	'`(?<=^|\s)(www\.\S+[^\s[:punct:]])`i'
    Ce n'est pas rigoureux, mais probablement suffisant pour ton besoin.

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 63
    Points : 70
    Points
    70
    Par défaut
    Un grand merci, c'est tout de suite plus simple avec des explications claires =)

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

Discussions similaires

  1. Créer un HREF ou une URL cliquable en Java
    Par BobbyWeb dans le forum Général Java
    Réponses: 3
    Dernier message: 07/04/2011, 16h18
  2. Réponses: 7
    Dernier message: 15/10/2008, 11h21
  3. [RegEx] Problème regex url cliquable
    Par dorian53 dans le forum Langage
    Réponses: 5
    Dernier message: 16/11/2006, 19h17
  4. [RegEx] URL cliquable comment faire ?
    Par loady dans le forum Langage
    Réponses: 5
    Dernier message: 27/03/2006, 16h34

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