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 :

[bbcode] marche pas bien avec associations [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 43
    Points
    43
    Par défaut [bbcode] marche pas bien avec associations
    Bonjour tout le monde :-°

    J'ai fait une petite fonction Ecodage pour le bbcode et j'ai un soucis:

    Voici la fonction

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    function Encodage($texte)
    {
    $texte = preg_replace('#:\)#i', '<img src="images/smile_content.png" alt=":-)"/>', $texte);
    $texte = preg_replace('#:p#i', '<img src="images/smile_p.png" alt=":p"/>', $texte);
    $texte = preg_replace('#;\)#i', '<img src="images/smile_clin.png" alt=";)"/>', $texte);
    $texte = preg_replace('#:d#i', '<img src="images/smile_d.png" alt=":D"/>', $texte);
    $texte = preg_replace('#8-\)#i', '<img src="images/smile_lunettes.png" alt="8-)"/>', $texte);
    $texte = preg_replace('#:\(#i', '<img src="images/smile_fache.png" alt=":-("/>', $texte);
     
    //Traitement du texte
    $texte = preg_replace('#\[b\](.+)\[/b\]#i', '<strong>$1</strong>', $texte);//Gras
    $texte = preg_replace('#\[i\](.+)\[/i\]#i', '<em>$1</em>', $texte);//Italique
    $texte = preg_replace('#\[s\](.+)\[/s\]#i', '<span class="souligne">$1</span>', $texte);//Souligné
    $texte = preg_replace('#\[aligne=(.+)\](.+)\[/aligne\]#i', '<div class="$1">$2</div>', $texte);//Allignement
    $texte = preg_replace('#\[couleur=(.+)\](.+)\[/couleur\]#i', '<span class="$1">$2</span>', $texte);//Couleur
     
     
    //Traitement des titres
    $texte = preg_replace('#\[titre=grand\](.+)\[/titre\]#i', '<h2 class="titre">$1</h2>', $texte);//Titre grand
    $texte = preg_replace('#\[titre=normal\](.+)\[/titre\]#i', '<h3 class="titre">$1</h3>', $texte);//Titre normal
    $texte = preg_replace('#\[titre=petit\](.+)\[/titre\]#i', '<h4 class="titre">$1</h4>', $texte);//Titre petit
     
    //Traitement des liens
    $texte = preg_replace('#\[url=(.+)\](.+)\[/url\]#i', '<a href="$1">$2</a>', $texte);//Liens
     
    //Traitement des images
    $texte = preg_replace('#\[img\](.+)\[/img\]#i', '<img src="$1" alt="image_user"/>', $texte);//Images
    $texte = preg_replace('#\[aligne=(.+)\](.+)\[/aligne\]#i', '<span class="$1">$2</span>', $texte);//Allignement des images
     
     
    return $texte;
    }
    Le soucis vient quand j'associe plusieurs balises: par exemple

    [aligne=alignD][img][/img][/aligne]

    Je me demande si vous connaissez le problème et surtout sa solution...
    Est ce que ça vient de l'ordre des preg_replace dans le code par exemple?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    C'est à dire ? Je pense que vous allez avoir un problème avec la gourmandise de l'expression régulière car par exemple le texte suivant : "{b}gras1{/b} et {b}gras2{/b}" va vous être actuellement affiché comme "gras1 et gras2" au lieu de "gras1 et gras2". En effet, les expressions régulières sont par défaut gourmandes, comportement où la chaîne la plus longue correspondant au motif est recherchée : pour inverser cette tendance vous pouvez utiliser l'option U.

    Pour information, une source similaire est présentée dans la FAQ.

    Par ailleurs, savez-vous qu'au lieu de faire de multiples preg_replace vous avez la possibilité d'utiliser un tableau pour les paramètres pattern et replacement ?

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 43
    Points
    43
    Par défaut
    Merci julp pour toutes vos précisions.

    Je vais essayer de rajouter l'option U, je l'avais vue sur un code du genre mais je ne voyais pas la raison alors je ne l'ai pas mise.

    Quant au tableau j'y ai pensé mais je n'ai pas vu ce que ça apportait...

    Est que j'y gagne quelque chose au niveau vitesse par exemple?

    Edit: J'ai rajouté un "s" en plus du "U" pour le multiligne et tout s'enchevêtre très bien maintenant

    Encore une fois merci pour votre intervention

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut


    Citation Envoyé par Woufeigh
    Quant au tableau j'y ai pensé mais je n'ai pas vu ce que ça apportait...
    Plus lisible peut être : vous n'avez plus qu'un preg_replace à faire. Côté performances je ne sais pas si cela change réellement quelque chose n'ayant pas fait le test ... L'important c'est que vous vous y retrouviez

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 43
    Points
    43
    Par défaut
    C'est bien ce que je me disais.

    Encore une fois merci.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/09/2009, 23h54
  2. Selection souris ne marche pas bien
    Par kahya dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 18/01/2008, 16h30
  3. envoi en tcp qui marche pas bien
    Par zarbiman dans le forum Développement
    Réponses: 2
    Dernier message: 18/12/2007, 00h21
  4. Réponses: 2
    Dernier message: 22/09/2007, 11h39
  5. Problème avec iE (marche tès bien avec firefox)
    Par kader93 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 20/06/2007, 10h47

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