Partage
  • Partager sur Facebook
  • Partager sur Twitter

BBCode dans un livre d'or ?

Comment faire avec le livre d'or de M@teo ?

Sujet résolu
    1 février 2006 à 14:55:48

    Salut !

    Souvent dans mon livre d'or, les visiteurs mettent ça :

    Citation : Visiteur

    "Superbe site, bonne chance ;)"



    Et j'aimerai avoir AVEC un smiley à la place du ";)" !
    Merci d'avance !
    Ciaooo !
    • Partager sur Facebook
    • Partager sur Twitter
      1 février 2006 à 15:21:57

      Merci, mais, dans le cours, y'a un script d'exemple ?

      EDIT :


                      <?php
                      if (!isset($bbcode_form))
              $bbcode_form = 'post';
          if (!isset($bbcode_field))
              $bbcode_field = 'req_message';
          ?>
              <script type="text/javascript">
                                                      <!--
                                                              function insert_text(open, close)
                                                              {
                                                                      msgfield = (document.all) ? document.all.req_message : document.forms['<?php echo $bbcode_form ?>']['<?php echo $bbcode_field ?>'];

                                                                      // IE support
                                                                      if (document.selection && document.selection.createRange)
                                                                      {
                                                                              msgfield.focus();
                                                                              sel = document.selection.createRange();
                                                                              sel.text = open + sel.text + close;
                                                                              msgfield.focus();
                                                                      }

                                                                      // Moz support
                                                                      else if (msgfield.selectionStart || msgfield.selectionStart == '0')
                                                                      {
                                                                              var startPos = msgfield.selectionStart;
                                                                              var endPos = msgfield.selectionEnd;

                                                                              msgfield.value = msgfield.value.substring(0, startPos) + open + msgfield.value.substring(startPos, endPos) + close + msgfield.value.substring(endPos, msgfield.value.length);
                                                                              msgfield.selectionStart = msgfield.selectionEnd = endPos + open.length + close.length;
                                                                              msgfield.focus();
                                                                      }

                                                                      // Fallback support for other browsers
                                                                      else
                                                                      {
                                                                              msgfield.value += open + close;
                                                                              msgfield.focus();
                                                                      }

                                                                      return;
                                                              }
                                                      -->
                                                      </script>
                                                      <div style="padding-top: 4px">
                                                              <b><input type="button" value=" Gras " name="B" onclick="insert_text('[b]','[/b]')" /></b>
                                                              <i><input type="button" value=" Italique " name="I" onclick="insert_text('[i]','[/i]')" /></i>
                                                              <u><input type="button" value=" Souligné " name="U" onclick="insert_text('[u]','[/u]')" /></u>
                                                              <input type="button" value=" Lien " name="Url" onclick="insert_text('[url]','[/url]')" />
                                                      </div>
                                                      <?php

      if (!defined('PUN'))
              exit;


      // Here you can add additional smilies if you like (please note that you must escape singlequote and backslash)
      $smiley_text = array(':)', '=)', ':|', '=|', ':(', '=(', ':D', '=D', ':o', ':O', ';)', ':/', ':P', ':lol:', ':mad:', ':rolleyes:', ':cool:');
      $smiley_img = array('smile.png', 'smile.png', 'neutral.png', 'neutral.png', 'sad.png', 'sad.png', 'big_smile.png', 'big_smile.png', 'yikes.png', 'yikes.png', 'wink.png', 'hmm.png', 'tongue.png', 'lol.png', 'mad.png', 'roll.png', 'cool.png');

      // Uncomment the next row if you add smilies that contain any of the characters &"'<>
      //$smiley_text = array_map('pun_htmlspecialchars', $smiley_text);


      //
      // Make sure all BBCodes are lower case and do a little cleanup
      //
      function preparse_bbcode($text, &$errors, $is_signature = false)
      {
              // Change all simple BBCodes to lower case
              $a = array('[B]', '[I]', '[U]', '[/B]', '[/I]', '[/U]');
              $b = array('[b]', '[i]', '[u]', '[/b]', '[/i]', '[/u]');
              $text = str_replace($a, $b, $text);

              // Do the more complex BBCodes (also strip excessive whitespace and useless quotes)
              $a = array( '#\[url=("|\'|)(.*?)\\1\]\s*#i',
                                      '#\[url\]\s*#i',
                                      '#\s*\[/url\]#i',
                                      '#\[email=("|\'|)(.*?)\\1\]\s*#i',
                                      '#\[email\]\s*#i',
                                      '#\s*\[/email\]#i',
                                      '#\[img\]\s*(.*?)\s*\[/img\]#is',
                                      '#\[colou?r=("|\'|)(.*?)\\1\](.*?)\[/colou?r\]#is');

              $b = array(     '[url=$2]',
                                      '[url]',
                                      '[/url]',
                                      '[email=$2]',
                                      '[email]',
                                      '[/email]',
                                      '[img]$1[/img]',
                                      '[color=$2]$3[/color]');

              if (!$is_signature)
              {
                      // For non-signatures, we have to do the quote and code tags as well
                      $a[] = '#\[quote=(&quot;|"|\'|)(.*?)\\1\]\s*#i';
                      $a[] = '#\[quote\]\s*#i';
                      $a[] = '#\s*\[/quote\]\s*#i';
                      $a[] = '#\[code\][\r\n]*(.*?)\s*\[/code\]\s*#is';

                      $b[] = '[quote=$1$2$1]';
                      $b[] = '[quote]';
                      $b[] = '[/quote]'."\n";
                      $b[] = '[code]$1[/code]'."\n";
              }

              // Run this baby!
              $text = preg_replace($a, $b, $text);

              if (!$is_signature)
              {
                      $overflow = check_tag_order($text, $error);

                      if ($error)
                              // A BBCode error was spotted in check_tag_order()
                              $errors[] = $error;
                      else if ($overflow)
                              // The quote depth level was too high, so we strip out the inner most quote(s)
                              $text = substr($text, 0, $overflow[0]).substr($text, $overflow[1], (strlen($text) - $overflow[0]));
              }
              else
              {
                      global $lang_prof_reg;

                      if (preg_match('#\[quote=(&quot;|"|\'|)(.*)\\1\]|\[quote\]|\[/quote\]|\[code\]|\[/code\]#i', $text))
                              message($lang_prof_reg['Signature quote/code']);
              }

              return trim($text);
      }


      //
      // Parse text and make sure that [code] and [quote] syntax is correct
      //
      function check_tag_order($text, &$error)
      {
              global $lang_common;

              // The maximum allowed quote depth
              $max_depth = 3;

              $cur_index = 0;
              $q_depth = 0;

              while (true)
              {
                      // Look for regular code and quote tags
                      $c_start = strpos($text, '[code]');
                      $c_end = strpos($text, '[/code]');
                      $q_start = strpos($text, '[quote]');
                      $q_end = strpos($text, '[/quote]');

                      // Look for [quote=username] style quote tags
                      if (preg_match('#\[quote=(&quot;|"|\'|)(.*)\\1\]#sU', $text, $matches))
                              $q2_start = strpos($text, $matches[0]);
                      else
                              $q2_start = 65536;

                      // Deal with strpos() returning false when the string is not found
                      // (65536 is one byte longer than the maximum post length)
                      if ($c_start === false) $c_start = 65536;
                      if ($c_end === false) $c_end = 65536;
                      if ($q_start === false) $q_start = 65536;
                      if ($q_end === false) $q_end = 65536;

                      // If none of the strings were found
                      if (min($c_start, $c_end, $q_start, $q_end, $q2_start) == 65536)
                              break;

                      // We are interested in the first quote (regardless of the type of quote)
                      $q3_start = ($q_start < $q2_start) ? $q_start : $q2_start;

                      // We found a [quote] or a [quote=username]
                      if ($q3_start < min($q_end, $c_start, $c_end))
                      {
                              $step = ($q_start < $q2_start) ? 7 : strlen($matches[0]);

                              $cur_index += $q3_start + $step;

                              // Did we reach $max_depth?
                              if ($q_depth == $max_depth)
                                      $overflow_begin = $cur_index - $step;

                              ++$q_depth;
                              $text = substr($text, $q3_start + $step);
                      }

                      // We found a [/quote]
                      else if ($q_end < min($q_start, $c_start, $c_end))
                      {
                              if ($q_depth == 0)
                              {
                                      $error = $lang_common['BBCode error'].' '.$lang_common['BBCode error 1'];
                                      return;
                              }

                              $q_depth--;
                              $cur_index += $q_end+8;

                              // Did we reach $max_depth?
                              if ($q_depth == $max_depth)
                                      $overflow_end = $cur_index;

                              $text = substr($text, $q_end+8);
                      }

                      // We found a [code]
                      else if ($c_start < min($c_end, $q_start, $q_end))
                      {
                              // Make sure there's a [/code] and that any new [code] doesn't occur before the end tag
                              $tmp = strpos($text, '[/code]');
                              $tmp2 = strpos(substr($text, $c_start+6), '[code]');
                              if ($tmp2 !== false)
                                      $tmp2 += $c_start+6;
                                     
                              if ($tmp === false || ($tmp2 !== false && $tmp2 < $tmp))
                              {
                                      $error = $lang_common['BBCode error'].' '.$lang_common['BBCode error 2'];
                                      return;
                              }
                              else
                                      $text = substr($text, $tmp+7);

                              $cur_index += $tmp+7;
                      }

                      // We found a [/code] (this shouldn't happen since we handle both start and end tag in the if clause above)
                      else if ($c_end < min($c_start, $q_start, $q_end))
                      {
                              $error = $lang_common['BBCode error'].' '.$lang_common['BBCode error 3'];
                              return;
                      }
              }

              // If $q_depth <> 0 something is wrong with the quote syntax
              if ($q_depth)
              {
                      $error = $lang_common['BBCode error'].' '.$lang_common['BBCode error 4'];
                      return;
              }
              else if ($q_depth < 0)
              {
                      $error = $lang_common['BBCode error'].' '.$lang_common['BBCode error 5'];
                      return;
              }

              // If the quote depth level was higher than $max_depth we return the index for the
              // beginning and end of the part we should strip out
              if (isset($overflow_begin))
                      return array($overflow_begin, $overflow_end);
              else
                      return null;
      }


      //
      // Split text into chunks ($inside contains all text inside $start and $end, and $outside contains all text outside)
      //
      function split_text($text, $start, $end)
      {
              global $pun_config;

              $tokens = explode($start, $text);

              $outside[] = $tokens[0];

              $num_tokens = count($tokens);
              for ($i = 1; $i < $num_tokens; ++$i)
              {
                      $temp = explode($end, $tokens[$i]);
                      $inside[] = $temp[0];
                      $outside[] = $temp[1];
              }

              if ($pun_config['o_indent_num_spaces'] != 8 && $start == '[code]')
              {
                      $spaces = str_repeat(' ', $pun_config['o_indent_num_spaces']);
                      $inside = str_replace("\t", $spaces, $inside);
              }

              return array($inside, $outside);
      }


      //
      // Truncate URL if longer than 55 characters (add http:// or ftp:// if missing)
      //
      function handle_url_tag($url, $link = '')
      {
              global $pun_user;

              $full_url = str_replace(array(' ', '\'', '`'), array('%20', '', ''), $url);
              if (strpos($url, 'www.') === 0)   // If it starts with www, we add http://
                      $full_url = 'http://'.$full_url;
              else if (strpos($url, 'ftp.') === 0)    // Else if it starts with ftp, we add ftp://
                      $full_url = 'ftp://'.$full_url;
              else if (!preg_match('#^([a-z0-9]{3,6})://#', $url, $bah))      // Else if it doesn't start with abcdef://, we add http://
                      $full_url = 'http://'.$full_url;

              // Ok, not very pretty :-)
              $link = ($link == '' || $link == $url) ? ((strlen($url) > 55) ? substr($url, 0 , 39).' &hellip; '.substr($url, -10) : $url) : stripslashes($link);

              return '<a href="'.$full_url.'">'.$link.'</a>';
      }


      //
      // Turns an URL from the [img] tag into an <img> tag or a <a href...> tag
      //
      function handle_img_tag($url, $is_signature = false)
      {
              global $lang_common, $pun_config, $pun_user;

              $img_tag = '<a href="'.$url.'">&lt;'.$lang_common['Image link'].'&gt;</a>';

              if ($is_signature && $pun_user['show_img_sig'] != '0')
                      $img_tag = '<img class="sigimage" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';
              else if (!$is_signature && $pun_user['show_img'] != '0')
                      $img_tag = '<img class="postimg" src="'.$url.'" alt="'.htmlspecialchars($url).'" />';

              return $img_tag;
      }


      //
      // Convert BBCodes to their HTML equivalent
      //
      function do_bbcode($text)
      {
              global $lang_common, $pun_user;

              if (strpos($text, 'quote') !== false)
              {
                      $text = str_replace('[quote]', '</p><blockquote><div class="incqbox"><p>', $text);
                      $text = preg_replace('#\[quote=(&quot;|"|\'|)(.*)\\1\]#seU', '"</p><blockquote><div class=\"incqbox\"><h4>".str_replace(array(\'[\', \'\\"\'), array(\'&#91;\', \'"\'), \'$2\')." ".$lang_common[\'wrote\'].":</h4><p>"', $text);
                      $text = preg_replace('#\[\/quote\]\s*#', '</p></div></blockquote><p>', $text);
              }
             
              $pattern = array('#\[b\](.*?)\[/b\]#s',
                                               '#\[i\](.*?)\[/i\]#s',
                                               '#\[u\](.*?)\[/u\]#s',
                                               '#\[url\]([^\[]*?)\[/url\]#e',
                                               '#\[url=([^\[]*?)\](.*?)\[/url\]#e',
                                               '#\[email\]([^\[]*?)\[/email\]#',
                                               '#\[email=([^\[]*?)\](.*?)\[/email\]#',
                                               '#\[color=([a-zA-Z]*|\#?[0-9a-fA-F]{6})](.*?)\[/color\]#s');

              $replace = array('<strong>$1</strong>',
                                               '<em>$1</em>',
                                               '<span class="bbu">$1</span>',
                                               'handle_url_tag(\'$1\')',
                                               'handle_url_tag(\'$1\', \'$2\')',
                                               '<a href="mailto:$1">$1</a>',
                                               '<a href="mailto:$1">$2</a>',
                                               '<span style="color: $1">$2</span>');

              // This thing takes a while!
              $text = preg_replace($pattern, $replace, $text);

              return $text;
      }


      //
      // Make hyperlinks clickable
      //
      function do_clickable($text)
      {
              global $pun_user;

              $message = ' '.$text;

              $message = preg_replace('#([\s\(\)])(https?|ftp|news){1}://([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^"\s\(\)<\[]*)?)#ie', '\'$1\'.handle_url_tag(\'$2://$3\')', $text);
              $message = preg_replace('#([\s\(\)])(www|ftp)\.(([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^"\s\(\)<\[]*)?)#ie', '\'$1\'.handle_url_tag(\'$2.$3\', \'$2.$3\')', $text);

              return substr($text, 1);
      }


      //
      // Convert a series of smilies to images
      //
      function do_smilies($text)
      {
              global $smiley_text, $smiley_img;

              $message = ' '.$message.' ';

              $num_smilies = count($smiley_text);
              for ($i = 0; $i < $num_smilies; ++$i)
                      $text = preg_replace("#(?<=.\W|\W.|^\W)".preg_quote($smiley_text[$i], '#')."(?=.\W|\W.|\W$)#m", '$1<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0, strrpos($smiley_img[$i], '.')).'" />$2', $text);

              return substr($message, 1, -1);
      }


      //
      // Parse message text
      //
      function parse_message($message, $hide_smilies)
      {
              global $pun_config, $lang_common, $pun_user;

              if ($pun_config['o_censoring'] == '1')
                      $message = censor_words($message);

              // Convert applicable characters to HTML entities
              $message = pun_htmlspecialchars($message);

              // If the message contains a code tag we have to split it up (text within [code][/code] shouldn't be touched)
              if (strpos($message, '[code]') !== false && strpos($text, '[/code]') !== false)
              {
                      list($inside, $outside) = split_text($text, '[code]', '[/code]');
                      $outside = array_map('ltrim', $outside);
                      $tmessage = implode('<">', $outside);
              }

              if ($pun_config['o_make_links'] == '1')
                      $message = do_clickable($message);

              if ($pun_config['o_smilies'] == '1' && $pun_user['show_smilies'] == '1' && $hide_smilies == '0')
                      $message = do_smilies($message);

              if ($pun_config['p_message_bbcode'] == '1' && strpos($message, '[') !== false && strpos($message, ']') !== false)
              {
                      $text = do_bbcode($message);

                      if ($pun_config['p_message_img_tag'] == '1')
                      {
      //                  $text = preg_replace('#\[img\]((ht|f)tps?://)([^\s<"]*?)\.(jpg|jpeg|png|gif)\[/img\]#e', 'handle_img_tag(\'$1$3.$4\')', $text);
                              $message = preg_replace('#\[img\]((ht|f)tps?://)([^\s<"]*?)\[/img\]#e', 'handle_img_tag(\'$1$3\')', $message);
                      }
              }

              // Deal with newlines, tabs and multiple spaces
              $pattern = array("\n", "\t", '  ', '  ');
              $replace = array('<br />', '&#160; &#160; ', '&#160; ', ' &#160;');
              $message = str_replace($pattern, $replace, $message);

              // If we split up the message before we have to concatenate it together again (code tags)
              if (isset($inside))
              {
                      $outside = explode('<">', $message);
                      $message = '';

                      $num_tokens = count($outside);

                      for ($i = 0; $i < $num_tokens; ++$i)
                      {
                              $message .= $outside[$i];
                              if (isset($inside[$i]))
                              {
                                      $num_lines = ((substr_count($inside[$i], "\n")) + 3) * 1.5;
                                      $height_str = ($num_lines > 35) ? '35em' : $num_lines.'em';
                                      $message .= '</p><div class="codebox"><div class="incqbox"><h4>'.$lang_common['Code'].':</h4><div class="scrollbox" style="height: '.$height_str.'"><pre>'.$inside[$i].'</pre></div></div></div><p>';
                              }
                      }
              }

              // Add paragraph tag around post, but make sure there are no empty paragraphs
              $message = str_replace('<p></p>', '', '<p>'.$message.'</p>');

              return $message;
      }


      //
      // Parse signature text
      //
      function parse_signature($text)
      {
              global $pun_config, $lang_common, $pun_user;

              if ($pun_config['o_censoring'] == '1')
                      $message = censor_words($message);

              $text = pun_htmlspecialchars($message);

              if ($pun_config['o_make_links'] == '1')
                      $message = do_clickable($message);

              if ($pun_config['o_smilies_sig'] == '1' && $pun_user['show_smilies'] != '0')
                      $message = do_smilies($message);

              if ($pun_config['p_sig_bbcode'] == '1' && strpos($message, '[') !== false && strpos($message, ']') !== false)
              {
                      $message = do_bbcode($message);

                      if ($pun_config['p_sig_img_tag'] == '1')
                      {
      //                  $text = preg_replace('#\[img\]((ht|f)tps?://)([^\s<"]*?)\.(jpg|jpeg|png|gif)\[/img\]#e', 'handle_img_tag(\'$1$3.$4\', true)', $text);
                              $message = preg_replace('#\[img\]((ht|f)tps?://)([^\s<"]*?)\[/img\]#e', 'handle_img_tag(\'$1$3\', true)', $message);
                      }
              }

              // Deal with newlines, tabs and multiple spaces
              $pattern = array("\n", "\t", '  ', '  ');
              $replace = array('<br />', '&#160; &#160; ', '&#160; ', ' &#160;');
              $text = str_replace($pattern, $replace, $message);

              return $message;
      }


      $smiley_dups = array();
      $num_smilies = count($smiley_text);
      for ($i = 0; $i < $num_smilies; ++$i)
      {
              // Is there a smiley at the current index?
              if (!isset($smiley_text[$i]))
                      continue;

              if (!in_array($smiley_img[$i], $smiley_dups))
                      echo "\t\t\t\t\t\t\t".'<a href="javascript:insert_text(\''.$smiley_text[$i].'\', \'\');"><img src="http://www.jakpro.free.fr/forum/img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.$smiley_text[$i].'" /></a>'."\n";

              $smiley_dups[] = $smiley_img[$i];
      }

      ?>
          <form method="post" action="livredor.php">
              <p>
              Pseudo : <input name="pseudo" /><br />
              Message :<br />
              <textarea name="message" rows="8" cols="35"></textarea> <br />
              <input type="submit" value="Envoyer" />
          </p>
          </form>

      <p class="pages">
      <?php
      mysql_connect("xx", "xx", "xx");
      mysql_select_db("xx");

      // --------------- Etape 1 -----------------
      // Si un message est envoyé, on l'enregistre
      // -----------------------------------------

      if (isset($_POST['pseudo']) AND isset($_POST['message']))
      {
         
          $pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES); // On utilise htmlentities par mesure de sécurité
          $message = htmlentities($_POST['message'], ENT_QUOTES); // 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 livredor VALUES('', '" . $pseudo . "', '" . $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 = 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 livredor');
      $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 'Page : ';
      for ($i = 1 ; $i <= $nombreDePages ; $i++)
      {
          echo '<a href="livredor.php?page=' . $i . '">' . $i . '</a> ';
      }

      ?>

      </p>

      <?php
      // --------------- 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 (livreor.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 livredor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);

      while ($donnees = mysql_fetch_array($reponse))
      {
          echo '<p><b>' . $donnees['pseudo'] . '</b> a écrit :<br />' . $donnees['message'] . '</p>';
      }

      mysql_close(); // On n'oublie pas de fermer la connexion à MySQL ;o)
      ?>


      Merci d'avance !
      • Partager sur Facebook
      • Partager sur Twitter
        1 février 2006 à 15:47:43

        hum, c'est pas en me filant tout ton code que je vais t'aider. Si tu ne sais pas te servir de str_èreplace, va voir la doc ;)

        OJe te conseille de l'utiliser avec des tableaux.
        • Partager sur Facebook
        • Partager sur Twitter
          1 février 2006 à 16:00:23

          Avec des tableaux ? Comment ça ?
          Et je la trouve où la doc ?
          Merci d'avance !
          • Partager sur Facebook
          • Partager sur Twitter
            1 février 2006 à 16:27:28

            Merci, mais..eum, j'ai rien compris o_O:euh:
            C'est plus facile avec les tableaux ? :-°
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              1 février 2006 à 17:35:29

              utilise les fonctions régulières
              allez c'est mon jour de bonté :

              $textarea = preg_replace('!;\)!', '<img src="bbcode/smiley/clin.png" alt=";\)" />', $textarea);

              "$textarea" correspond à la chaine à traiter (c'est aussi la chaine de sortie)
              {faut faire attention aux echappement de métacaratères !!! donc pense aux anti-slashes}
              • Partager sur Facebook
              • Partager sur Twitter
                1 février 2006 à 17:39:28

                Citation : jérémie

                utilise les fonctions régulières
                allez c'est mon jour de bonté :

                $textarea = preg_replace('!;\)!', '<img src="bbcode/smiley/clin.png" alt=";\)" />', $textarea);

                "$textarea" correspond à la chaine à traiter (c'est aussi la chaine de sortie)
                {faut faire attention aux echappement de métacaratères !!! donc pense aux anti-slashes}




                NON ! Pas d'expression régulières pour des smileys. Pour le BBcode, oui, mais pas pour des smileys.
                • Partager sur Facebook
                • Partager sur Twitter
                  1 février 2006 à 17:47:17

                  Bah comment ça fonctione alors o_O
                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 février 2006 à 17:59:00


                    function smileys($chaine)
                        {   
                        $smileys = array(
                           ':p' => '<img src="smileys/langue.gif" alt="langue" />',
                           ':)' => '<img src="smileys/smile.jpg" alt="smile" />'
                        );

                        $keys = array_keys($smileys);

                        return str_replace($keys, $smileys, $chaine);
                        }
                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 février 2006 à 18:07:30

                      Merci beaucoup, mais je le place où par contre ? :o

                      Et $keys et $chaine, je doit les changer ou... ???

                      EDIT :
                      En tout cas, je l'ai placé comme ça :

                      if (isset($_POST['pseudo']) AND isset($_POST['message']))
                      {
                          function smileys($chaine)
                          {   
                          $smileys = array(
                                 ':D' => '<img src="http://www.jakpro.free.fr/forum/img/smilies/big_smile.png" alt="happy" />',
                                 ':-D' => '<img src="http://www.jakpro.free.fr/forum/img/smilies/big_smile.png" alt="happy" />',
                             ':)' => '<img src="http://www.jakpro.free.fr/forum/img/smilies/smile.png" alt="smile" />',
                                 ':-)' => '<img src="http://www.jakpro.free.fr/forum/img/smilies/smile.png" alt="smile" />',
                             ';)' => '<img src="http://www.jakpro.free.fr/forum/img/smilies/wink.png" alt="wink" />',
                                 ';-)' => '<img src="http://www.jakpro.free.fr/forum/img/smilies/wink.png" alt="wink" />',
                                 ':p' => '<img src="http://www.jakpro.free.fr/forum/img/smilies/tongue.png" alt="tongue" />',
                                 ':P' => '<img src="http://www.jakpro.free.fr/forum/img/smilies/tongue.png" alt="tongue" />',
                                 ':(' => '<img src="http://www.jakpro.free.fr/forum/img/smilies/sad.png" alt="sad" />',
                                 ':cool:' => '<img src="http://www.jakpro.free.fr/forum/img/smilies/cool.png" alt="cool" />',
                                 '8-)' => '<img src="http://www.jakpro.free.fr/forum/img/smilies/roll.png" alt="sarcastic" />',
                                 ':-o)' => '<img src="http://www.jakpro.free.fr/forum/img/smilies/yikes.png" alt="surprise" />'
                          );

                          $keys = array_keys($smileys);

                          return str_replace($keys, $smileys, $chaine);
                          }
                          $pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES); // On utilise htmlentities par mesure de sécurité
                          $message = htmlentities($_POST['message'], ENT_QUOTES); // 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 livredor VALUES('', '" . $pseudo . "', '" . $message . "')");
                      }


                      EDIT² : J'ai testé...ça marche pas :(
                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 février 2006 à 18:40:30

                        ok, mais faut que tu rajoutes après $message = nl2br($message); !

                        $message = smileys($message);
                        • Partager sur Facebook
                        • Partager sur Twitter
                          1 février 2006 à 18:42:41

                          Je test tout de suite !
                          Merci de m'aider :D

                          Merci ça marche !
                          Mais maintenant, je fais comment pour le gras, souligné, italique, et le clique qui ajoute le code ?

                          EDIT :
                          Voici le résultat :
                          Voyez par vous-même !
                          Mais le problème, c'est les smileys cliquables, ça met pas le code dans le textarea, j'ai le JS et tout pourtant !

                          <form method="post" action="livredor.php">
                                  <p><img src="livredor.png"></p>
                                  <p>
                                  <script language="JavaScript" type="text/javascript">
                          /*function storeCaret(text)
                          { // voided
                          }
                          */
                          function AddText(startTag,defaultText,endTag)
                          {
                             with(document.poster)
                             {
                                if (message.createTextRange)
                                {
                                   var text;
                                   message.focus(message.caretPos);
                                   message.caretPos = document.selection.createRange().duplicate();
                                   if(message.caretPos.text.length>0)
                                   {
                                      //gère les espace de fin de sélection. Un double-click sélectionne le mot
                                      //+ un espace qu'on ne souhaite pas forcément...
                                      var sel = message.caretPos.text;
                                      var fin = '';
                                      while(sel.substring(sel.length-1, sel.length)==' ')
                                      {
                                         sel = sel.substring(0, sel.length-1)
                                         fin += ' ';
                                      }
                                      message.caretPos.text = startTag + sel + endTag + fin;
                                   }
                                   else
                                      message.caretPos.text = startTag+defaultText+endTag;
                                }
                                else message.value += startTag+defaultText+endTag;
                             }
                          }
                          </script>
                                  Pseudo : <input name="pseudo" /><br />
                                  Message :<br />
                                          <a href="javascript:AddText('',':D','');"><img src="http://www.jakpro.free.fr/forum/img/smilies/big_smile.png" alt="happy" class="sameline" /></a>
                                          <a href="javascript:AddText('',':)','');"><img src="http://www.jakpro.free.fr/forum/img/smilies/smile.png" alt="happy" class="sameline" /></a>
                                          <a href="javascript:AddText('',';)','');"><img src="http://www.jakpro.free.fr/forum/img/smilies/wink.png" alt="wink" class="sameline" /></a>
                                          <a href="javascript:AddText('',':(','');"><img src="http://www.jakpro.free.fr/forum/img/smilies/sad.png" alt="sad" class="sameline" /></a>
                                          <a href="javascript:AddText('',':p','');"><img src="http://www.jakpro.free.fr/forum/img/smilies/tongue.png" alt="tongue" class="sameline" /></a>
                                          <a href="javascript:AddText('',':cool:','');"><img src="http://www.jakpro.free.fr/forum/img/smilies/cool.png" alt="cool" class="sameline" /></a>
                                          <a href="javascript:AddText('','8-)','');"><img src="http://www.jakpro.free.fr/forum/img/smilies/roll.png" alt="sarcastic" class="sameline" /></a>
                                          <a href="javascript:AddText('',':-o','');"><img src="http://www.jakpro.free.fr/forum/img/smilies/yikes.png" alt="surprise" class="sameline" /></a>
                                          <br />
                                  <textarea name="message" rows="8" cols="35" wrap="virtual" onmouseover="this.focus();"></textarea> <br />
                                  <input type="submit" value="Envoyer" />
                              </p>
                              </form>
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 février 2006 à 16:13:02

                            S'il vous plait, vous pouvez m'aider à faire des smileys cliquables ? Merci.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 février 2006 à 17:35:34

                              Les smileys cliquables, ca ne relève plus de ce forum ;)
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                2 février 2006 à 17:55:01

                                Si ton problème est résolu, merci de le signaler ;) !
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  2 février 2006 à 18:48:35

                                  Oui, OK, mais pour les balises de Gras, Iltalique et Souligné, je fais ? :

                                  function bbcode($chaine)
                                      {   
                                      $bbcode = array(
                                             '[b]' => '<b>',
                                             '[/b]' => '</b>',
                                             '[i]' => '<i>',
                                             '[/i]' => '</i>',
                                             '[u]' => '<u>',
                                             '[/u]' => '</u>',
                                             );

                                      $keys = array_keys($bbcode);

                                      return str_replace($keys, $bbcode, $chaine);
                                      }
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    3 février 2006 à 16:07:36

                                    non, là, il vaut mieux que tu utilises les régex ;)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      3 février 2006 à 17:52:01

                                      C'est pas un REGEX ce que je viens de mettre ? o_O
                                      Bah, c'est le seul code de remplacement que je connaisse, moi ! :o
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        3 février 2006 à 17:56:01

                                        non, ca, c'est une simple fonctyion de remplacement.

                                        Pour les régex => http://www.expreg.com/
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          3 février 2006 à 17:58:09

                                          C'est que la différence entre srt_replace et preg_replace ? :euh:

                                          EDIT : Ca donnera ça ?


                                           <?php
                                          function bbcode($texte)
                                                 {
                                                   $bbcode= array (
                                                    "/\[b\](.+?)\[\/b\]/si",
                                                    "/\[i\](.+?)\[\/i\]/si",
                                                    "/\[u\](.+?)\[\/u\]/si",
                                                    "/\[B\](.+?)\[\/B\]/si",
                                                    "/\[I\](.+?)\[\/I\]/si",
                                                    "/\[U\](.+?)\[\/U\]/si",
                                                    "/\[url=(.+?)\](.+?)\[\/url\]/si",
                                                    "/\[img=(.+?)\]/si",
                                                    "/\[font=(.+?)\](.+?)\[\/font\]/si",
                                                    "/\[color=(.+?)\](.+?)\[\/color\]/si",
                                                    "/\[size=(.+?)\](.+?)\[\/size\]/si"
                                                   );
                                                   $htmlcode= array (
                                                    "<b>$1</b>",
                                                    "<i>$1</i>",
                                                    "<u>$1</u>",
                                                    "<b>$1</b>",
                                                    "<i>$1</i>",
                                                    "<u>$1</u>",
                                                    "<a href=\"$1\">$2</a>",
                                                    "<img src=\"$1\">",
                                                    "<font face=\"$1\">$2</font>",
                                                    "<font color=\"$1\">$2</font>",
                                                    "<span style=\"font-size:$1 pt\">$2</span>"
                                                   );
                                                   return(preg_replace($bbcode,$htmlcode,$texte));
                                                  }
                                          ?>
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            4 février 2006 à 13:46:59

                                            Pour le BBCode, le gras et tout ça, c'est pas l'important, car avec le htmlentities ça marche pas (je l'ai remis, oui)
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            BBCode dans un livre d'or ?

                                            × 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