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 :

Ajouter une condition pour le preg_replace [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 134
    Points : 47
    Points
    47
    Par défaut Ajouter une condition pour le preg_replace
    Bonjour.

    Dans un système de news, j'ai un bout de code qui permet de remplacer les url http://www.google.fr par <a href="http://www.google.fr" class="url">http://www.google.fr</a> au moment de les insérer dans la BDD

    Voici le bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $contenu = preg_replace('#http://.[a-zA-Z0-9%_?!\-\/.]+#', '<a href="$0" class="url">$0</a>', $contenu);
    ?>
    Je peux être amené à modifier les news.
    Le problème c'est que les liens déjà traités vont l'être encore.

    Ce qui va donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="<a href="http://www.google.fr" class="url">http://www.google.fr</a>" class="url"><a href="http://www.google.fr" class="url">http://www.google.fr</a></a>
    Pour éviter ça il faut que j'ai une condition, mais je ne vois pas comment l'appliquer. :/

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Points : 161
    Points
    161
    Par défaut
    Vérifie que l'URL n'est pas entourée de guillemets avec des lookbehind/lookahead (http://www.regular-expressions.info/lookaround.html) :

    (?<!")...(?!")

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 134
    Points : 47
    Points
    47
    Par défaut
    Au risque de paraitre pour un idiot, le lien parle de cette technique pour Perl 5 et non PHP. A moins que j'ai mal lu. :p

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Points : 161
    Points
    161
    Par défaut
    PCRE = Perl-Compatible Regular Expression (Library)

    Les fonctions preg_ appartiennent à la bibliothèque du même nom :
    http://www.php.net/manual/fr/book.pcre.php

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Tu peux tenter un truc comme ça (non testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $contenu = preg_replace('#(?<!href=")http://.[a-zA-Z0-9%_?!\-\/.]+#', '<a href="$0" class="url">$0</a>', $contenu);
    ?>

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 134
    Points : 47
    Points
    47
    Par défaut
    Merci pour vos réponses :

    asdf007 : Je n'ai pas vraiment eu le temps de m'intéresser à ta proposition ça sera fait d'ici demain.

    s.n.a.f.u : Bien essayé, mais ça ne fonctionne pas. :p

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Bon, je retente, avec des tests cette fois

    Code : 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
    <?php
    $reg = '#(?<!>|href=")http://.[a-zA-Z0-9%_?!\-\/.]+(?!</a>)#';
     
    $str = 'http://www.google.fr';
    $rep = '<a href="$1" class="url">$0</a>';
     
    print_r($str);
    print_r("\n");
     
    $str = preg_replace($reg, $rep, $str);
     
    print_r($str);
     
    print_r("\n");
     
    $str = preg_replace($reg, $rep, $str);
     
    print_r($str);

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 134
    Points : 47
    Points
    47
    Par défaut
    Bien tenté, mais quand je clique sur les liens, ça ne me redirige pas :

    Le code interprété :

    http://www.google.fr
    <a href="" class="url">http://www.google.fr</a>
    <a href="" class="url">http://www.google.fr</a>

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 134
    Points : 47
    Points
    47
    Par défaut
    Plop,

    Je répond un peu tard car j'ai eu pas mal de soucis que je n'avais pas pris en compte au départ.
    J'ai totalement abandonné l'idée de remplacer en auto les url en lien hypertexte pour la bonne raison que si le proprio décide d'intégrer une vidéo de Youtube par exemple et bien ça ne fonctionne pas !

    Donc j'ai trouvé un petit éditeur HTML en JS qui fait très bien son boulot et met tout le monde d'accord.

    Merci d'avoir pris le temps de m'aider à résoudre ce problème.

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

Discussions similaires

  1. Ajouter une condition pour la commande net use dans un batch
    Par killahpriest dans le forum Administration
    Réponses: 0
    Dernier message: 23/10/2014, 16h05
  2. [Drupal] Comment ajouter une condition presave pour un type de contenu?
    Par maxwel56 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 26/04/2012, 18h25
  3. Ajouter une librairie pour php sur un Serveur dédié
    Par tchoumak dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 28/06/2006, 22h22
  4. [File][JFileChooser]Ajouter une extension pour "Save as
    Par leminipouce dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 27/01/2006, 15h45
  5. Ajouter une clé pour une session non ouverte
    Par prgasp77 dans le forum Windows
    Réponses: 4
    Dernier message: 29/10/2005, 00h26

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