Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec bbcode

    7 mars 2007 à 18:38:34

    Bonjour,

    Je suis en train de coder un bbcode pour mon site mais je rencontre des problèmes.
    Ces problèmes surviennent au moment du parsage du bbcode en html.
    Les liens, les emails et les citations ne sont pas pris en compte.
    Si vous pouviez m'aider, ça serait bien.

    Voici la fonction code :

    function code($texte, $chemin)
    {
    //Smileys
    $texte = str_replace(':honte:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/3897.gif" alt=":honte:" />', $texte);
    $texte = str_replace('O:)','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/ange.gif" alt="O:)" />', $texte);
    $texte = str_replace(':charte:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/charte.gif" alt=":charte:" />', $texte);
    $texte = str_replace(':attention:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/attention.gif" alt=":attention:" />', $texte);
    $texte = str_replace(':gg:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/yeah.gif" alt=":gg:" />', $texte);
    $texte = str_replace(':gne:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/gne_final.gif" alt=":gne:" />', $texte);
    $texte = str_replace(':noncoupable:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/jeplaidenoncoupable.gif" alt=":noncoupable:" />', $texte);
    $texte = str_replace(':LOL:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/lol_final.gif" alt=":LOL:" />', $texte);
    $texte = str_replace(':malade:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/malade2.gif" alt=":malade:" />', $texte);
    $texte = str_replace(':troll:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/troll_1.gif" alt=":troll:" />', $texte);
    $texte = str_replace(':patate:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/patate_final.gif" alt=":patate:" />', $texte);
    $texte = str_replace(':croix:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/x.gif" alt=":croix:" />', $texte);
    $texte = str_replace(':fleche:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/fleched.gif" alt=":fleche:" />', $texte);
    $texte = str_replace(':diable:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/diable.gif" alt=":diable:" />', $texte);
    $texte = str_replace(':langue:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/langue.gif" alt=":langue:" />', $texte);
    $texte = str_replace(':pirate:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/pirate.gif" alt=":pirate:" />', $texte);
    $texte = str_replace(':siffle:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/siffle.gif" alt=":siffle:" />', $texte);
    $texte = str_replace(':cool:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/cool2.gif" alt=":cool:" />', $texte);
    $texte = str_replace('Oo','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/Oo.gif" alt="Oo" />', $texte);
    $texte = str_replace(':bisous:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/zibou.gif" alt=":bisous:" />', $texte);
    $texte = str_replace(':cligne:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/hehe.gif" alt=":cligne:" />', $texte);
    $texte = str_replace(':(','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/decu.gif" alt=":(" />', $texte);
    $texte = str_replace(':|','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/hum.gif" alt=":|" />', $texte);
    $texte = str_replace(':tusors:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/tusors.gif" alt=":tusors:" />', $texte);
    $texte = str_replace(':mort:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/mort.gif" alt=":mort:" />', $texte);
    $texte = str_replace(':colere:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/angry.gif" alt=":colere:" />', $texte);
    $texte = str_replace('^^','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/hihi.gif" alt="^^" />', $texte);
    $texte = str_replace(':rire:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/mdr.gif" alt=":rire:" />', $texte);
    $texte = str_replace(':neutre:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/neutre_final.gif" alt=":neutre:" />', $texte);
    $texte = str_replace(':mouais:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/mouais.gif" alt=":mouais:" />', $texte);
    $texte = str_replace(':sniff:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/sniff.gif" alt=":sniff:" />', $texte);
    $texte = str_replace(':penseur:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/penseur.gif" alt=":penseur:" />', $texte);
    $texte = str_replace(':)','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/tongue2.gif" alt=":)" />', $texte);
    $texte = str_replace(':gene:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/gene2.gif" alt=":gene:" />', $texte);
    $texte = str_replace(':passur:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/unsure2.gif" alt=":passur:" />', $texte);
    $texte = str_replace(':D','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/marrant.gif" alt=":D" />', $texte);
    $texte = str_replace(':pfff:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/pfff.gif" alt=":pfff:" />', $texte);
    $texte = str_replace(':arf:','<img src="'.$chemin.'templates/images/designs/{$theme}/smileys/arf.gif" alt=":arf:" />', $texte);

    //Mise en forme du texte
    //gras
    $texte = preg_replace('`\[gras\](.+)\[/gras\]`isU', '<span style="font-weight: bold;">$1</span>', $texte);
    //italic
    $texte = preg_replace('`\[italique\](.+)\[/italique\]`isU', '<span style="font-style: italic;">$1</span>', $texte);
    //souligné
    $texte = preg_replace('`\[souligne\](.+)\[/souligne\]`isU', '<span style="text-decoration: underline;">$1</span>', $texte);
    // barré
    $texte = preg_replace('`\[barre\](.+)\[/barre\]`isU', '<span style="text-decoration: line-throught;">$1</span>', $texte);
    //gauche
    $texte = preg_replace('`\[align=left\](.+)\[/align\]`isU', '<div align="left">$1</div>', $texte);
    //centre
    $texte = preg_replace('`\[align=center\](.+)\[/align\]`isU', '<div align="center">$1</div>', $texte);
    //droite
    $texte = preg_replace('`\[align=right\](.+)\[/align\]`isU', '<div align="right">$1</div>', $texte);
    // justifié
    $texte = preg_replace('`\[align=justify\](.+)\[/align\]`isU', '<div align="justify">$1</div>', $texte);
    //image
    $texte = preg_replace('`\[image\](.+)\[/image\]`isU', '<img src="$1" />', $texte);
    //lien
    $texte = preg_replace('`\[lien=(#http://[a-z0-9._/-]+#i)\](.+)\[/lien\]`isU', '<a href="$1">$2</a>', $texte);
    //quote
    $texte = preg_replace('`\[quote auteur=([a-z0-9A-Z._-]+) \](.+)\[/quote\]`isU', '<div id="quote">Auteur : $1 </ br> $2 </div>', $texte);
    //couleur
    $texte = preg_replace('`\[color=rouge\](.+)\[/color\]`isU', '<span style="color: red;">$1</span>', $texte);
    $texte = preg_replace('`\[color=vert\](.+)\[/color\]`isU', '<span style="color: green;">$1</span>', $texte);
    $texte = preg_replace('`\[color=jaune\](.+)\[/color\]`isU', '<span style="color: yellow;">$1</span>', $texte);
    $texte = preg_replace('`\[color=bleu\](.+)\[/color\]`isU', '<span style="color: blue;">$1</span>', $texte);
    $texte = preg_replace('`\[color=noir\](.+)\[/color\]`isU', '<span style="color: black;">$1</span>', $texte);
    $texte = preg_replace('`\[color=marron\](.+)\[/color\]`isU', '<span style="color: brown;">$1</span>', $texte);
    $texte = preg_replace('`\[color=violet\](.+)\[/color\]`isU', '<span style="color: purple;">$1</span>', $texte);
    $texte = preg_replace('`\[color=rose\](.+)\[/color\]`isU', '<span style="color: pink;">$1</span>', $texte);
    $texte = preg_replace('`\[color=orange\](.+)\[/color\]`isU', '<span style="color: orange;">$1</span>', $texte);
    // taille
    $texte = preg_replace('`\[taille=8\](.+)\[/taille\]`isU', '<span style="font-size: x-small;">$1</span>', $texte);
    $texte = preg_replace('`\[taille=10\](.+)\[/taille\]`isU', '<span style="font-size: small;">$1</span>', $texte);
    $texte = preg_replace('`\[taille=14\](.+)\[/taille\]`isU', '<span style="font-size: large;">$1</span>', $texte);
    $texte = preg_replace('`\[taille=16\](.+)\[/taille\]`isU', '<span style="font-size: x-large;">$1</span>', $texte);
    // titre
    $texte = preg_replace('`\[titre1\](.+)\[/titre1\]`isU', '<h2 class="titre1_wcode">$1</h2>', $texte);
    $texte = preg_replace('`\[titre2\](.+)\[/titre2\]`isU', '<h3 class="titre2_wcode">$1</h3>', $texte);

    //On retourne la variable texte
    return $texte;
    }


    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      7 mars 2007 à 19:35:51

      quote ne fontionne que s'il y a un auteur. Il faut un deuxième preg pour le faire sans. POur les liens en [lien][/lien], il ne marche aussi que s'il une url dans [lien=...] est indiqué et le mailto n'est pas dans ta liste.

      Je vois que tu as copier coller un code d'ailleurs qui n'est pas complet, tu dois rajouter ce dont tu as besoin. Dis nous présicément le bbcode que tu veux en plus (les balises qui ne fonctionnent pas en toute lettre).
      • Partager sur Facebook
      • Partager sur Twitter
        7 mars 2007 à 20:26:33

        Merci de ta réponse.

        Il est vrai que je me suis aidé d'un code déjà fait mais ce n'est pas du copier coller.
        Les balises qui ne fonctionnent pas sont [lien=][/lien], [email=][/email], [quote auteur=][/quote]

        Pour le deuxième preg, je pense qu'il faut faire quelquechose comme ça :

        //quote
        $texte = preg_replace('`\[quote\](.+)\[/quote\]`isU', '<div id="quote">$1</div>', $texte);
        //lien
        $texte = preg_replace('`\[lien\](.+)\[/lien\]`isU', '<a href="$1">$1</a>', $texte);


        Et pour l'email :

        //email
        $texte = preg_replace('`\[email=([a-z0-9._/-]+)\](.+)\[/lien\]`isU', '<a href="mailto:$1">$2</a>', $texte);
        $texte = preg_replace('`\[email\](.+)\[/lien\]`isU', '<a href="mailto:$1">$1</a>', $texte);


        Corrige moi si ce n'est pas ça.

        Merci d'avance
        • Partager sur Facebook
        • Partager sur Twitter
          7 mars 2007 à 20:49:49

          C'est Bison qui va se marrer en voyant ça ^^

          Déjà pour les smilies tu peux faire un seul str_replace en utilisant deux tableaux :


          $motif = array(':)',':(',';)');
          $replace = array('happy','sad','wink');
          $chaine = str_replace($motif, '<img src="images/smilies/'. $replace .'.gif" alt="'. $replace .'" />', $chaine);


          ++
          • Partager sur Facebook
          • Partager sur Twitter
            7 mars 2007 à 20:55:59

            Merci de ta réponse.

            Je vais changer le code avec ta méthode.
            Sinon, est-ce que le reste est bon ?

            Merci d'avance
            • Partager sur Facebook
            • Partager sur Twitter
              7 mars 2007 à 21:11:55

              C'est tout à fait ça, rajoute-le à ton code. Fais ce que te propose Emacs et aussi avec tes couleur, utilise (rouge|orange|bleu|...) ce qui ne prendra qu'un seul preg_replace du coup.
              • Partager sur Facebook
              • Partager sur Twitter
                7 mars 2007 à 21:51:18

                Merci beaucoup pour votre aide.

                Je vais tester tout ça et je vous tient au courant ;)
                EDIT : J'ai testé et il y a un problème avec les smileys et les [lien=][lien]. Les symboles smileys sont tous remplacés par Array et les balises lien ne sont pas interprétées (que quand il y a l'adresse dans la balise avec le = ).
                Et j'ai aussi un problème avec le barré. Le texte est normal, il n'est pas barré.

                J'espère que vous pourrez m'aider.

                Merci encore
                • Partager sur Facebook
                • Partager sur Twitter
                  8 mars 2007 à 13:49:04

                  As-tu rajouter cette ligne ?
                  $texte = preg_replace('`\[lien\](.+)\[/lien\]`isU', '<a href="$1">$1</a>', $texte);
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 mars 2007 à 14:32:46

                    Oui, je l'ai rajoutée.
                    Celle-ci marche mais pas celle avec le = .
                    Voici la ligne qui ne fonctionne pas :

                    $texte = preg_replace('`\[lien=(#http://[a-z0-9._/-]+#i)\](.+)\[/lien\]`isU', '<a href="$1">$2</a>', $texte);

                    Est-ce que ce ne serait pas le bout de code entre le = et le ] qui est faux ?

                    Pour l'erreur avec les smileys, voici le code :

                    $motif=array(':honte:','O:)',':charte:',':attention:',':gg:',':gne:',
                    ':noncoupable:',':LOL:',':malade:',':troll:',':patate:',':croix:',
                    ':fleche:',':diable:',':langue:',':pirate:',':siffle:',':cool:','Oo',
                    ':bisous:',':cligne:',':(',':|',':tusors:',':mort:',':colere:','^^',
                    ':rire:',':neutre:',':mouais:',':sniff:',':penseur:',':)',':gene:',
                    ':passur:',':D',':pfff:',':arf:',':waw:');
                    $replace=array('3897','ange','charte','attention','yeah',
                    'gne_final','jeplaidenoncoupable','lol_final','malade2',
                    'troll_1','patate_final','x','fleched','diable','langue',
                    'pirate','siffle','cool2','Oo','zibou','clin','triste','hum',
                    'tusors','mort','angry','hihi','rire','neutre_final','mouais',
                    'sniff','penseur','smile','gene2','unsure2','tongue2','pfff',
                    'arf','waw');
                    $texte = str_replace($motif, '<img src="'.$chemin.'templates/images/designs/'.$theme.'/smileys/'.$replace .'.gif" alt="'.$replace.'" />', $texte);

                    Je rappelle que les smileys sont tous remplacés par : Array

                    Merci de vos réponses
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 mars 2007 à 16:33:51

                      Pour les smilies, on est obligé de faire ça :


                      <?php

                              $motif = array(
                                     
                                      ':)',
                                      ':(',
                                      ';)'
                              );
                             
                              $replace = array(
                             
                                      '<img src="images/smilies/happy.gif" alt="Happy" />',
                                      '<img src="images/smilies/sad.gif" alt="Sad" />',
                                      '<img src="images/smilies/wink.gif" alt="Wink" />'
                              );
                             
                              $chaine = str_replace($motif, $replace, $chaine);
                              echo $chaine;

                      ?>
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Problème avec bbcode

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown