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 :

preg_replace : conversion bbcode de la balise [list] [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 8
    Points
    8
    Par défaut preg_replace : conversion bbcode de la balise [list]
    Bonjour,

    j'ai un problème dans la conversion de [list] en bbcode à <ul> en html, mon code php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $text = preg_replace("/\[list=([^\]]*)\](.+)\[\/list]/", "<ul type=\"$1\">$2</ul>", $text);
    $text = preg_replace("/\[\*]([^\[]+)(?=(\[\*])|(<\/ul>))/", "<li>$1</li>", $text);
    pour le bbcode, j'utilise 3 types de listes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    [ list=circle ]
    [ * ]element1
    [ * ]element2
    [ /list ]
     
    [ list=1 ]
    [ * ]element1
    [ /list ]
     
    [ list=a ]
    [ * ]element1
    [ * ]element1
    [ /list ]
    (j'ai fait des espaces pour ne pas convertir le code bbcode ici)
    ça marche seulement lorsque j'ajoute une seule liste, mais lorsque mon textarea contient plusieurs listes, ça marche pas, quelque'un peut m'aider SVP ?

    Merci d'avance

  2. #2
    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
    Bonjour,

    Les sauts de ligne existent-ils vraiment dans la chaîne en entrée ?

  3. #3
    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
    Avec les sauts de ligne, ça pourrait être ça

    J'ai aussi ajouté les espaces pour la lisibilité
    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
    <?php
    $myString = "[ list=circle ]
    [ *]element1
    [ *]element2
    [ /list ]
    [ list=carre ]
    [ *]element3
    [ /list ]";
     
    $pattern = '#\[ list=([^\]]*) \] (.*?) \[ /list \]#smx';
    $myString = preg_replace($pattern, '<ul class="$1">$2</ul>', $myString);
    $pattern = '# \[\*\]([^\[<]+) \r#mx';
    $myString = preg_replace($pattern, '<li>$1</li>', $myString);
    print $myString;
    A noter que le caractère \r peut être \n suivant l'OS.

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Merci jml94 pour tes réponses,

    oui il y a des sauts de ligne dans la chaine

    je l'ai convertit avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $text = preg_replace("/\r\n|\r|\n/", "<br />", $text);
    tu peux m'expliquer les options après le # : s, m et x

    si tu as une liste avec tous les options, s, i, e, m, U..., je veux bien la lire, parce que je ne suis pas très avancé en regex

    Ton code marche bien, Merci

  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

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

Discussions similaires

  1. [RegEx] conversion BBCODE a HTML avec balises imbriquées
    Par Dr.Wily dans le forum Langage
    Réponses: 4
    Dernier message: 28/03/2013, 19h33
  2. regex : conversion bbcode [list] >> <ul>
    Par mrdindo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/12/2008, 15h42
  3. Conversion en int depuis un list control
    Par riric_94 dans le forum MFC
    Réponses: 13
    Dernier message: 06/06/2006, 20h30

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