Partage
  • Partager sur Facebook
  • Partager sur Twitter

Prévisualisation du BBCode

Balises fonctionnant une seule fois

Sujet résolu
    23 avril 2009 à 19:41:38

    Salut tout le monde :)
    J'ai [encore] un problème, cette fois ci c'est dans le BBCode.
    Lorsque je veux le prévisualiser, je clique sur le bouton "prévisualiser la page", et ça me fait ça m'affiche la page avec la mise en forme et tout :)
    Le problème c'est que les balises mettent en forme le texte UNE SEULE FOIS dans la prévisualisation, la première.
    Par exemple, avec du Zcode, ça me ferait :

    Citation : Texte mis en forme

    -Texte en rouge =>C'est la première fois que je demande du rouge, ça fonctionne!
    -Texte en rouge souligné =>Je demande du rouge, mais déjà utilisé, donc ça fonctionne pas... En revanche, j'ai pas utilisé de souligné, donc ça, ça fonctionne!
    -Texte en rouge, gras et souligné =>Seul le gras fonctionne car ça n'a pas été encore utilisé dans la page
    -Texte en rouge gras et souligné =>Toutes les balises ont été déjà utilisées, donc rien ne se met en forme...



    Voici des extraits de code source :

    Code de la fonction JS "bbcode" pour mettre en gras
    textarea_value = textarea_value.replace('<gras>', '<strong>');
    textarea_value = textarea_value.replace('</gras>', '</strong>');
    

    C'est du même style pour toutes les autres balises.

    Ca ne bug que pour la prévisualisation (donc sous JS), car pour l'affichage, avec le PHP/MYSQL donc, ça fonctionne très bien :)


    Si quelqu'un pouvait m'aider, ça serait cool :)

    Merci d'avance,
    Naturalitus
    • Partager sur Facebook
    • Partager sur Twitter
      23 avril 2009 à 19:53:35

      textarea_value = textarea_value.replace(/<gras>(.+?)<\/gras>/, '<strong>$1</strong>');
      
      • Partager sur Facebook
      • Partager sur Twitter
        24 avril 2009 à 19:55:59

        Salut :)
        En effet ton code fonctionne, mais cela fait le même problème, seul la première utilisation de la balise "gras" fonctionne ;)
        Une image pour mieux comprendre :
        Image utilisateur

        Merci quand même :)
        Naturalitus

        PS: Avec une boucle on pourrait pas faire ça? Je pense pas :p
        • Partager sur Facebook
        • Partager sur Twitter
          24 avril 2009 à 23:04:23

          T'as oublié les flags Golmote (meme si ca devrait quand meme marcher ?)
          textarea_value = textarea_value.replace(/<gras>(.+?)<\/gras>/g, '<strong>$1</strong>');
          
          • Partager sur Facebook
          • Partager sur Twitter
            25 avril 2009 à 0:29:04

            Arf oui, j'ai voulu faire d'une pierre deux coups en améliorant la syntaxe... Mais j'en ai oublié le flag ! :euh:

            Bref... ça devrait fonctionner maintenant non ?
            • Partager sur Facebook
            • Partager sur Twitter
              25 avril 2009 à 10:14:57

              En effet ça fonctionne, merci beaucoup à vous deux !
              [Heureusement qu'il y a des gens comme vous et d'autres qui aident plein de zéros sur les forums :) ]

              Naturalitus
              EDIT :
              Petit bug : quand je fais des liens, ça n'en fait qu'un avec l'adresse url du premier lien :-°
              voici le code :
              textarea_value = textarea_value.replace(/<lien url=([^>]+)>(.+)<\/lien>/gi, "<a href=\"$1\">$2</a>");
              

              J'espère que ça va pas me faire pareil pour les images :p
              • Partager sur Facebook
              • Partager sur Twitter
                26 avril 2009 à 12:29:42

                Euh... à mon avis, si tu as des " autour de la valeur de l'attribut, ça serait plus :
                /<lien[^>]*url="([^"]+)[^>]*">(.+)<\/lien>/gi

                Je suis mauvais en RegEx... mais ça devrait marcher...
                • Partager sur Facebook
                • Partager sur Twitter
                  26 avril 2009 à 14:21:55

                  Salut Xavier,
                  J'ai essayé la regex que tu m'as donnée, ça n'a pas vraiment marché... :s
                  Cane met pas de lien du tout ;)
                  J'ai essayé en modifiant certains trucs, par exemple le "[^>]*" entre "<lien" et "url=", car il n'y a normalement rien d'écrit ici, et en faisant d'autres modifs, en gardant les guillemets.

                  Si je tape le BBCode suivant :
                  BBCode
                  <lien url=http://URL1.fr>1</lien> <italique>2</italique> <lien url=http://URL2.fr>3</lien>

                  ...j'obtiendrait le code html suivant :
                  <a href="http://URL1.fr">1 <em>2</em> 3</a>
                  

                  En effet, seules les premières balises prennent effet, jusqu'à la dernière, d'où le résultat 1 2 3

                  Merci quand même :)

                  Naturalitus
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 avril 2009 à 14:28:25

                    Bah où est le problème ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 avril 2009 à 15:50:43

                      Si je veux avoir deux liens, par exemple faire une liste de liens utiles, pour faire ça :
                      "
                      -Test1
                      -Test2
                      -Test3
                      "
                      je devrai avoir un code comme ça (BBCode) :
                      -<lien url=http://URL1.fr>Test1</lien>
                      -<lien url=http://URL2.fr>Test2</lien>
                      -<lien url=http://URL3.fr>Test3</lien>


                      Le problème, c'est que ce code me donnerait ça :
                      "
                      -Test1
                      -Test2
                      -Test3

                      "
                      L'adresse URL du lien serait alors celle donnée dans le premier lien ('http://URL1.fr'), et de la première balise lien à la dernière, ce serait un seul lien.
                      C'est un peu dur à expliquer et comprendre, j'avoue ^^

                      Merci,
                      Naturalitus
                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 avril 2009 à 15:53:42

                        Il faut enlever la gourmandise :
                        textarea_value = textarea_value.replace(/<lien url=([^>]+)>(.+?)<\/lien>/gi, "<a href=\"$1\">$2</a>");
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                          26 avril 2009 à 16:07:07

                          Bah je vois pas... redonne la ligne qui passe de l'un à l'autre...
                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 avril 2009 à 16:32:17

                            Merci beaucoup, pour tout ça c'est réglé. Je me suis inspiré des codes précédents pour régler tous les problèmes de ce style.

                            Me reste une chose : les smileys...
                            textarea_value = textarea_value.replace(';)', '<img src="/img/smileys/1.gif" alt=";)" />');
                            

                            Le premier ";)" est transformé en " ;) " alors que tous les suivants restent des ";)".
                            Je ne vois pas trop comment faire... :euh:

                            Après je vous laisse tranquilles, promis :D lol

                            Merci d'avance
                            Naturalitus
                            • Partager sur Facebook
                            • Partager sur Twitter
                              26 avril 2009 à 16:42:40

                              T'as pas l'impression de demander tout le temps la meme chose la ?
                              Reprend les codes qu'on t'as déja donnés et adapte !
                              • Partager sur Facebook
                              • Partager sur Twitter
                                26 avril 2009 à 18:47:37

                                Il te faut le flag "g"...

                                Mais comme dit Timot, j'ai l'impression que ça a été résolu dans un autre topic ça... >_<
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  26 avril 2009 à 19:53:36

                                  textarea_value = textarea_value.replace(/;\)/g, '<img src="/img/smileys/1.gif" alt=";)" />');
                                  

                                  ou
                                  textarea_value = textarea_value.replace(/;)/g, '<img src="/img/smileys/1.gif" alt=";)" />');
                                  

                                  (Je penche pour le premier mais si ça ne marche pas, essayes le deuxième...</span>
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    26 avril 2009 à 20:31:08

                                    xavier c'est le premier ! nod_ a déjà corrigé cette erreur dans un autre post ! ^^
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      26 avril 2009 à 20:36:32

                                      Je sais mais j'avais le flemme d'aller voir :p
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        27 avril 2009 à 18:51:35

                                        Merci pour toutes vos réponses :)
                                        J'avais en effet pensé que c'était la même histoire pour tous les problèmes, et j'avais fait une recherche (bon petite j'avoue ^^ ) sur les flag /g et /gi sur google et le SdZ, mais la recherche étant brève, je n'ai pas trouvé à quoi ils servaient...

                                        Merci encore pour vos réponses et désolé pour le dérangement ;)
                                        Naturalitus
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Prévisualisation du 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