Souci avec quele que bbcode.php des regex

Bonjour,

voilà un livre d'or

http://forum.exemple.free.fr/index.php

donc le souci c'est les puces et les possitions centrer gauche droites justifiers

voilà son code

// Balise Des Listes Des Puces

$texte = preg_replace('`\<liste\>`isU', '<ul>$1</ul>', $texte);
$texte = preg_replace('`\<puce\>`isU', '<li>', $texte);
$texte = preg_replace('`\<br \>`isU', '</li>', $texte);

// Positions
// Balise Des Textes Centrers

$texte = preg_replace('`\<position valeur = centrer\>(.+)\</position\>`isU', '<div class="centrer">$1</div>', $texte); 

// Balise Des Textes Droite

$texte = preg_replace('`\<position valeur = droite\>(.+)\</position\>`isU', '<span class="droite">$1</span>', $texte); 
// Balise Des Textes Gauche

$texte = preg_replace('`\<position valeur = gauche\>(.+)\</position\>`isU', '<span class="gauche">$1</span>', $texte); 
// Balise Des Textes Justifier

$texte = preg_replace('`\<position valeur = justifier\>(.+)\</position\>`isU', '<span class="justifier">$1</span>', $texte); 


donc a partir de puces il les mets hors du cadre

merci de votre aide
Configuration: Windows XP
Internet Explorer 7.0

34 réponses

Résumé de la discussion

Plusieurs développeurs discutent d'un script PHP qui convertit des balises BBCode en HTML; le souci principal est l'alignement des puces et des positions, qui sortent du cadre lors du rendu. Des propositions portent sur le CSS, notamment l'ajustement des classes droite, centrer et justifier, et l'ajout d'overflow et de marges pour éviter que le contenu ne déborde. Autre voie: corriger les remplacements PHP pour les balises liste et puce, s'assurer que les balises LI et UL sont correctement ouvertes et fermées dans bbcodes.php. En parallèle, certains indiquent que l'emplacement du cadre principal influence le rendu et que les ajustements doivent être effectués progressivement pour ne pas casser le flux.

Bobot (l’IA à votre service)
  1. re

    es ce que tu est rentré car j'ai encore un souci avec les puces

    merci de m'aidé et dés que tu répond je t'expliquerais car greg m'a pas encore répondu pour les regex du livre d'or

    merci de ton aide
    1. re juste pour te dire que je vais crée un autre sujet pour mes érreurs car j'ai mis sur mon site le livre qui as plus de bbcode donc ce sujet est résolue

      merci pour ton aide pour ces problémes

      a tout de suite pour l'autre sujet lol qui seras érreur w3c pour mon site perso lol
      1. re

        il y as aussi une érreur sur w3c au niveau du lien et les puces

        // Balises Des Liens 
        
        $texte = preg_replace('`\<lien\>(.+)\</lien\>`isU', '<a href="$1" target="_blank" alt="lien" title="lien">$1</a>', $texte); 
        


        merci de ton aide
        1. re

          en faite c'est un peux bizzare j'ai un peux trafiqué le css

          si on met dans w3c

          http://forum.exemple.free.fr/index.php

          pas d'érreur

          si on met

          http://forum.exemple.free.fr/index.php?page=1

          pas d'érreur

          http://forum.exemple.free.fr/index.php?page=2

          pas d'érreur

          si on met dans w3c la 3 éme pages donc

          http://forum.exemple.free.fr/index.php?page=3

          il me dit 13 érreurs

          http://validator.w3.org/...

          on dirais il y as une érreur au niveau des puces dans bbcode.php

          donc

          // Balise Des Listes Des Puces 
          
          $texte = preg_replace('`\<liste\>`isU', '<ul>$1</ul>', $texte); 
          $texte = preg_replace('`\<puce\>`isU', '<li>', $texte); 
          $texte = preg_replace('`\<br \>`isU', '</li>', $texte); 
          
          


          et si on regarde la source à la page des puces voilà ceux qu'il donne

          <div class="pseudo">Posté par :<a> liste de puce</a> Le <a>20/09/2008</a> à <a>13:33 heure(s)</a></div> 
          <br /> 
          <div class="message"><ul></ul><li>bonjour<br /><br /> 
          <ul></ul><li>au revoir</div> 
          <br /> 
          


          on dirais il as oublier de mettre un /

          car il met <il> au lieu </il>

          et pour temps on as bien mis </il> mais il n'a pas tout à fais compris

          merci
          1. Re,

            Donc :
            One possible cause for this message is that you have attempted to put a block-level element (such as "<p>" or "<table>") inside an inline element (such as "<a>", "<span>", or "<font>").

            C'est que le "<p>" est mal encapsulé, comme par exemple dans un élément "<a>", "<span>", or "<font>".

            Pourquoi tu n'utilise pas le "<div>" sans align="center" si le problème est que tout est centré ?
            1. merci ça marche

              et là j'ai passé sur le w3

              il me dit pas d'érreur

              car j'ai mis ça

                        <div align="center" class="texte_blanc">
                    <?php include('includes/connect01.php');
              	  $reponse = mysql_query("SELECT COUNT(*) AS nbr_mess FROM livre_d_or");
              	  $donnees = mysql_fetch_array($reponse);
              	  $total = $donnees['nbr_mess'];
              	  if ($total == 0)
              	  {
              	  echo 'Aucun message n\'a été posté';
              	  }
              	  if ($total == 1)
              	  {
              	  echo '' . $total . ' message a été posté';
              	  }
              	  if ($total > 1)
              	  {
              	  echo '' . $total . ' messages ont été postés';
              	  }
              	  
              	  include('livre_d_or/message.php');
              	  ?></div>
              


              mais le souci tout est centré

              donc je remet

                    <p align="center" class="texte_blanc">
                    <?php include('includes/connect01.php');
              	  $reponse = mysql_query("SELECT COUNT(*) AS nbr_mess FROM livre_d_or");
              	  $donnees = mysql_fetch_array($reponse);
              	  $total = $donnees['nbr_mess'];
              	  if ($total == 0)
              	  {
              	  echo 'Aucun message n\'a été posté';
              	  }
              	  if ($total == 1)
              	  {
              	  echo '' . $total . ' message a été posté';
              	  }
              	  if ($total > 1)
              	  {
              	  echo '' . $total . ' messages ont été postés';
              	  }
              	  
              	  include('livre_d_or/message.php');
              	  ?></p>
              


              et là c'est tout est normal mais par contre il me dit il y as 32 érreurs

              http://validator.w3.org/...

              merci de me dire pour quoi entre le div et p il y as des érreurs
              1. Re,

                Alors pour le nombre de pages en bas, à la ligne 129, il faut remplacer :

                $nombreDeMessagesParPage = 20;

                Par :

                $nombreDeMessagesParPage = 15;

                Voila.
                1. re

                  désolé je n'ai pas fait attention à la page

                  mais il y as encore juste un petit truc en haut de la page

                  Page : 1 2 3

                  donc en haut c'est bon

                  mais celle du bas il y as une érreur il met

                  Page : 12

                  donc il as oublié de mettre la page 3

                  merci

                  et pour les positions droit c'est bon tout fonctionne
                  1. Pour le problème des pages. Aux lignes 39 et 147, il faut remplacer :

                    livre_d_or.php

                    Par :

                    index.php

                    Voila c'est tout.
                    1. Bonjour will.smith,

                      Déja, pour le positionnement de droite qui sort du flux, j'ai ajouté "overflow:auto;" dans la classe ".message", et j'ai également ajouté "margin-bottom:10px;" pour espacer les messages.

                      Voila la classe ".message" complète.

                      .message
                      {
                      overflow:auto;
                      clear:inherit;
                      margin-left:80px;
                      margin-right:80px;
                      margin-bottom:10px;
                      padding:5px;
                      border-left:1px dashed #FFFFFF; /* couleur du cadre */
                      border-right:1px dashed #FFFFFF;
                      border-bottom:1px dashed #FFFFFF;
                      border-top:1px dashed #FFFFFF;
                      color:#FFFFFF;
                      }

                      Pour la sélection des pages, je vais regarder et te tiens informé.
                      1. re

                        j'ai mis tout les bbcodes en fessant a chaque bbcode un message
                        donc voilà

                        http://forum.exemple.free.fr/index.php

                        donc il y as 2 soucis

                        1/ c'est le position droit ça vas être réglés dés que tu auras le temp

                        2/ le dernier souci comme il y as 3 pages

                        si on clique sur 1 ou 2 où 3 il me renvoy sur une page érreur

                        voilà la page où j'ai mis les chiffres des pages

                        voilà le code

                        <?php
                              include('includes/connect01.php');
                              include('bbcode/bbcode.php');
                        
                              //Si personne n'a posté
                        
                              $premier = mysql_query("SELECT COUNT(*) AS message_post FROM livre_d_or");
                        	  $message = mysql_fetch_array($premier);
                        	  $total = $message['message_post'];
                        	  if ($total == 0)
                        	  {
                        	  echo '<br /><br />Soyez le premier à poster !</p>';
                        	  }
                        	  if ($total >= 1)
                        	  {
                        
                              //----------------------------------------------------------------------------------------------//
                        	  //Si quelqun a déja posté
                        	  // On met dans une variable le nombre de messages qu'on veut par page
                        
                              $nombreDeMessagesParPage = 15;
                        
                              // Essayez de changer ce nombre pour voir :o)
                        	  // On récupère le nombre total de messages
                        
                              $retour = mysql_query("SELECT COUNT(*) AS nb_messages FROM livre_d_or");
                        	  $donnees = mysql_fetch_array($retour);
                        	  $totalDesMessages = $donnees['nb_messages'];
                        
                              // On calcule le nombre de pages à créer
                        
                              $nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
                        
                              // Puis on fait une boucle pour écrire les liens vers chacune des pages
                        
                              echo '<p class="pages" align="center">Page : ';
                        	  for ($i = 1 ; $i <= $nombreDePages ; $i++)
                        	  {
                        	  echo '<a href="livre_d_or.php?page=' . $i . '">' . $i . '</a> ';
                        	  }
                        
                              // --------------- Etape 3 ---------------
                        	  // Maintenant, on va afficher les messages
                        	  // ---------------------------------------
                        
                              if (isset($_GET['page']))
                        	  {
                        	  $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livre_d_or.php?page=4)
                        	  }
                        	  else
                        
                              // La variable n'existe pas, c'est la première fois qu'on charge la page
                        
                              {
                        	  $page = 1;
                        
                              // On se met sur la page 1 (par défaut)
                        
                              }
                        
                              // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
                        
                              $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
                        	  $reponse = mysql_query('SELECT * FROM livre_d_or ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
                        
                              echo'</p>';
                        
                              //On fait une boucle pour afficher tout les messages
                        
                              while ($donnees = mysql_fetch_array($reponse))
                        	  {
                        
                              //A partir d'ici tu doit faire appel à ta fonction de parsage comme ceci
                        
                              $message_parse = code($donnees['message']);
                        
                              ?>
                        
                              <div class="pseudo">Posté par :<a> <?php echo $donnees['pseudo']; ?></a> Le <a><?php echo $donnees['date']; ?></a> à <a><?php echo $donnees['heure']; ?> heure(s)</a></div>
                        <br />
                              <div class="message"><?php echo code(stripslashes(nl2br($donnees['message']))); ?></div>
                        <br />
                              <?php
                        
                              //On ferme le else
                        
                              }
                        
                              //On ferme la boucle
                        
                              }
                        	  if ($total == 0)
                        
                              //On se deconnecte
                        
                              mysql_close();
                        
                              if ($total >=1)
                        	  {
                        
                              // --------------- Etape 1 -----------------
                        	  // Si un message est envoyé, on l'enregistre
                        	  // -----------------------------------------
                        
                              if (isset($_POST['pseudo']) AND isset($_POST['message']))
                        	  {
                        	  $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
                        
                              // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
                        
                              $message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
                        
                              // De même pour le message
                        
                              $message = nl2br($message);
                        
                              // Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br />
                        	  // On peut enfin enregistrer :o)
                        
                              mysql_query("INSERT INTO livre_d_or  VALUES('', '".$_POST['pseudo']."', '".$_POST['message']."')");
                        	  }
                        
                              // --------------- Etape 2 -----------------
                        	  // On écrit les liens vers chacune des pages
                        	  // -----------------------------------------
                        
                              // On met dans une variable le nombre de messages qu'on veut par page
                        
                              $nombreDeMessagesParPage = 20;
                        
                              // Essayez de changer ce nombre pour voir :o)
                        	  // On récupère le nombre total de messages
                        
                              $retour = mysql_query("SELECT COUNT(*) AS nb_messages FROM livre_d_or");
                        	  $donnees = mysql_fetch_array($retour);
                        	  $totalDesMessages = $donnees['nb_messages'];
                        
                              // On calcule le nombre de pages à créer
                        
                              $nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
                        
                              // Puis on fait une boucle pour écrire les liens vers chacune des pages
                        
                              echo '<p align="center" class="pages">Page : ';
                        	  for ($i = 1 ; $i <= $nombreDePages ; $i++)
                        	  {
                        	  echo '<a href="livre_d_or.php?page=' . $i . '">' . $i . '</a></p>';
                        	  }
                        
                              //On ferme if
                        
                              }
                        	  if ($total == 0)
                        	  ?>


                        merci
                        1. en faite c'est juuste un petit détail mais rien d'importance

                          je crois que c'est juste le position droit qui fait ça car j'ai fais les autres ça ne fais pas pareil

                          mais il faut faire un par un pour voir si ça ne dépasse pas du cadre

                          je vais éssayé de le faire un par un pour voir si tout marche

                          et je te dirais si tout marche où il y as un code qui beugue
                          1. Bonjour,

                            Oui c'est pas grand chose, Je vais modifier le CSS et te tien informé.
                            1. re

                              excuse moi j'ai testé juste mis une phrase à droite

                              http://forum.exemple.free.fr/index.php

                              la phrase dépase le cadre

                              car j'ai fais un petit teste

                              si on met :

                              <position valeur = droite>mot</position>


                              il dépasse du cadre

                              mais par contre si on met

                              <position valeur = droite>mot</position>
                              
                              bonjour
                              


                              si on met un mot aprés on fait sauté une ligne en fessant entré
                              là il ne dépasse pas le cadre

                              enfin c'est juste un détail

                              tu peux tester tu verras

                              tu me diras si tu veux revoir un petit code pour quoi dés qu'on met un mot à droite il dépasse le cadre

                              en sachant il ne mettra jamais un mot a droite sur la dernier ligne

                              mais il faut quand même résoudre ce petit souci

                              merci

                              ps tu peux tester pour voir
                              1. Ok parfait. Vos fichiers seront supprimés de nos serveurs automatiquement.
                                Bonne continuation.
                                1. re

                                  j'ai remis dans le serveur avec celle du compte de mon frére

                                  et ça m'a l'aire de tout fonctionné

                                  et j'ai même éssayé de posté un autre message pour voir si le centrer droite etc... ca marchais

                                  donc il marche trés bien

                                  donc tu peux supprimé mes fichiers du serveur et si par hassard un moment ca se plantait je reviendrais

                                  je vais éssayé de reposté un message demain où dimanche juste pour voir

                                  et je te dirais si ça marche où ça s'est planté

                                  et tt de façon je reviendrais ici car vous êtes éfficaces lol

                                  merci pour ton aide
                                  1. Re bonjour will.smith,

                                    Bon ça y est, j'ai trouvé. Pour faire les tests j'ai copié tes sources ici :
                                    http://help.alpha2gamma.com/200809191504/forum.html

                                    Il y avait un petit soucis avec le CSS, trop de text-align:left; les un aprés le autres et du coup, le fait d'encapsuler les 'centrer" et les 'justifier' dans des <span> posait un problème.

                                    J'ai donc corriger le fichier CSS et le fichier bbcodes.php tu peux les récupérer dans l'archive 200809191830.zip qui est à cette adresse :
                                    http://help.alpha2gamma.com/200809191504/200809191830.zip

                                    Dans l'archive, il y a les fichiers "par_default.css" et "bbcodes.php" qu'il faut remplacer.

                                    Est-ce que tu peux faire la mise à jour de ces deux fichiers et me tenir informé du résultat ?

                                    A bientôt.
                                    1. merci ça marche pour la droite donc^pour le reste gauche centrer justifier :

                                      	  /* Position */
                                      
                                      	  .centrer
                                      	  {
                                      	  float:inherit;
                                      	  display:inline;
                                      	  text-align:center;
                                      	  }
                                      
                                      	  .gauche
                                      	  {
                                      	  float:left;
                                      	  display:inline;
                                      	  text-align:left;
                                      	  }
                                      
                                      	  .droite
                                      	  {
                                      	  float: right; 
                                      display: inline; 
                                      text-align:right; 
                                      	  }
                                      
                                      	  .justifier
                                      	  {
                                      	  text-align:justify;
                                      	  }
                                      


                                      il ne centre pas et le justifier

                                      http://forum.exemple.free.fr/

                                      car il ne centre pas le mot centrer.
                                      le justifié je ne pense pas quil soit justifié

                                      merci et aprés ca seras bon

                                      merci de ton aide
                                      1. Bonjour,

                                        Donc pour l'alignement à droite, dans le CSS il faut modifier la class 'droite comme ceci :

                                        .droite
                                        {
                                        float: right;
                                        display: inline;
                                        text-align:right;
                                        }
                                        1. re

                                          les balises gauche centrer et droite et justifier s'est planté

                                          // Positions 
                                          // Balise Des Textes Centrers 
                                          
                                          $texte = preg_replace('`\<position valeur = centrer\>(.+)\</position\>`isU', '<span class="centrer">$1</span>', $texte); 
                                          
                                          // Balise Des Textes Droite 
                                          
                                          $texte = preg_replace('`\<position valeur = droite\>(.+)\</position\>`isU', '<span class="droite">$1</span>', $texte); 
                                          // Balise Des Textes Gauche 
                                          
                                          $texte = preg_replace('`\<position valeur = gauche\>(.+)\</position\>`isU', '<span class="gauche">$1</span>', $texte); 
                                          // Balise Des Textes Justifier 
                                          
                                          $texte = preg_replace('`\<position valeur = justifier\>(.+)\</position\>`isU', '<span class="justifier">$1</span>', $texte); 


                                          et le css

                                          	  /* Position */
                                          
                                          	  .centrer
                                          	  {
                                          	  text-align:center;
                                          	  }
                                          
                                          	  .gauche
                                          	  {
                                          	  text-align:left;
                                          	  }
                                          
                                          	  .droite
                                          	  {
                                          	  text-align:right;
                                          	  }
                                          
                                          	  .justifier
                                          	  {
                                          	  text-align:justify;
                                          	  }
                                          


                                          merci de me dir pour quoi il ne comprend pas les class droite etc...
                                          • 1
                                          • 2