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 :

Lien cliquable et compatibilité bbcode [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut Lien cliquable et compatibilité bbcode


    Voilà j'ai encore un petit problème avec les expressions régulières. J'ai un script pour faire automatiquement des liens cliquables. Jusque là pas de problème, mais je donne aussi la possibilité de faire des lien bbocde comme [ url =x]lien[/url].

    L'url est donc parsée deux fois à cause du http://.

    Pour le moment j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Parse [ url ]
    $text = preg_replace('#\[url=([^\]]*)\](.*)\[/url\]#Usi', '<a href="$1" title="$2">$2</a>', $text);
     
    // Liens cliquables
    $in = array('`((?:https?|ftp)://\S+[[:alnum:]]/?)`si', '`((?<!//)(www\.\S+[[:alnum:]]/?))`si');
    $out = array('<a href="$1">$1</a>', '<a href="http://$1">$1</a>'); 
    $text = preg_replace($in, $out, $text);
    J'ai essayé de modifier la 2ème expression comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $in = array('`([^\]=](?:https?|ftp)://\S+[[:alnum:]]/?)`si', '`((?<!//)(www\.\S+[[:alnum:]]/?))`si');
    qui est censée rechercher s'il n'y a pas de "=" ou de "]" avant (balises bbcode) mais ça ne change rien et ça affiche n'importe quoi si j'ai des balises [url] (double lien), il y a sûrement une erreur de synthaxe comme je connais pas beaucoup mais je n'ai pas trouvé mieux.


  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 22
    Par défaut
    Salut,

    Pour éviter de retraiter les adresses à l'intérieur d'un [url = ], tu pourrais par exemple utiliser ça, en début de pattern, pour la fonction qui rend les liens automatiquement cliquables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/(^|[\n ]) ... /'

  3. #3
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    J'ai essayé d'adapter mon code avec celui de Hansolo. Ca à l'air de fonctionner, mais lorsque le lien est au milieu du texte, la regex supprime un espace avant le lien, et le lien est collé au texte à gauche. Quelqu'un voit où est l'erreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $in  = array('#^|[\n ]((?:https?|ftp)://\S+[[:alnum:]]/?)#si', '#((?<!//)(www\.\S+[[:alnum:]]/?))#si');
    $out = array('<a href="$1">$1</a>', '<a href="http://$1">$1</a>');
    $text = preg_replace($in, $out, $text);

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 22
    Par défaut
    Il faut garder les paranthèses du code donné plus haut et utiliser les paranthèses en début de remplacement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $out = array('$1<a href="$2">$2</a>', '<a href="http://$1">$1</a>');

  5. #5
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Ah oui j'avais essayé aussi avec les parenthèses mais je n'ai pas pensé à mettre le $1 en début du remplacement.

    Ca marche

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

Discussions similaires

  1. Regex lien cliquable interfère avec BBcode image
    Par Jeanjan dans le forum Langage
    Réponses: 12
    Dernier message: 16/11/2014, 15h35
  2. [RegEx] regex et lien cliquable
    Par Pallas4 dans le forum Langage
    Réponses: 1
    Dernier message: 22/09/2006, 13h57
  3. [Système] Créer un lien "cliquable"
    Par dams78 dans le forum Langage
    Réponses: 2
    Dernier message: 10/05/2006, 00h07
  4. [RegEx] lien cliquable
    Par Michel_57 dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2006, 23h57
  5. [RegEx] Problème pour transformer les url en liens cliquable
    Par AlphaYoDa dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2006, 14h54

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