Partage
  • Partager sur Facebook
  • Partager sur Twitter

Variable dans une Regex

Sujet résolu
    18 juillet 2006 à 12:44:50

    Je souhaite filtrer les gros mot dans le texte et les gros mot doive est placer dans une basse de donné. Donc j’ai essayer d’utilisé les Rejex, mais apparemment elle ne prend pas en compte les variables, comment faire ?

    Vois mon code :

    <?php
    include('./conf.php');

    $link = mysql_connect($mysql_server, $mysql_user, $mysql_pass);
    mysql_select_db($mysql_db) or die("Selection de la basse de donne : Echec");
    $query = "SELECT * FROM insulte";
    $resultquery = mysql_query($query);

    //Les gros mot !
    $texte = 'Merde
    Fuck'
    ;

        $texte = stripslashes($texte); // On enlève les slash qui se seraient ajoutés automatiquement
        $texte = htmlentities($texte); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
        $texte = nl2br($texte); // On crée des <br /> pour conserver les retours à la ligne
       

    while($afficheresult = mysql_fetch_assoc($resultquery) ) // tant qu'il y a des enregistrement faire 
    {       
        $insulte = $afficheresult['nom'];
            $texte = preg_replace("!$insulte!usU", '*********', $texte); //Tentative de remplacement des gros mots
    }

        // Affiche le résultat.
        echo $texte . '<br />';

    ?>


    CREATE TABLE `insulte` (
      `ID` smallint(6) NOT NULL AUTO_INCREMENT,
      `nom` varchar(50) NOT NULL DEFAULT '',
      PRIMARY KEY  (`ID`)
    );

    INSERT INTO `insulte` VALUES (1, 'fuck');
    INSERT INTO `insulte` VALUES (2, 'merde');
    • Partager sur Facebook
    • Partager sur Twitter
      18 juillet 2006 à 13:25:44

      Hellow

      Bon y'a du boulot :D

      Premièrement regex et pas rejex :p

      Ensuite explique moi pourquoi tu fait :
      $query = "SELECT * FROM insulte";
      $resultquery = mysql_query($query);

      A quoi te sers de mettre la requête dans une variable ? je veux bien admettre que dans certains cas c'est tolérable ( et encore ... ) mais là !

      Ensuite
      $texte = htmlentities($texte);

      ==> OMG :p c'est à l'enregistrement et non à l'affichage qu'on applique un htmlentities :)

      Puis :
      Dans ton cas nul besoin de regex ! un simple str_replace suffit !
      $texte = str_replace($insulte, '*********', $texte);


      Dernier conseil :

      Ta méthode va générer des tonnes de str_replace ! alors qu'un seul suffit :


      $insulte = array();
      while($afficheresult = mysql_fetch_assoc($resultquery) ) // tant qu'il y a des enregistrement faire
      {       
          $insulte[] = $afficheresult['nom'];       
      }
      $texte = str_replace($insulte, '*********', $texte); //Tentative de remplacement des gros mots


      Voila :)

      • Partager sur Facebook
      • Partager sur Twitter
        18 juillet 2006 à 13:34:09

        Citation : acid_burn

        $texte = htmlentities($texte);


        ==> OMG :p c'est à l'enregistrement et non à l'affichage qu'on applique un htmlentities :)


        Pourquoi htmlentities() ?
        htmlspecialchars est amplement suffisant.

        Citation : acid_burn


        Dans ton cas nul besoin de regex ! un simple str_replace suffit !

        $texte = str_replace($insulte, '*********', $texte);



        FAUX !
        Que fera t'il avec des mots enchassés ?
        Pour ce traitement on ne sait pas se passer de regex.
        Il y a des exemples la !
        • Partager sur Facebook
        • Partager sur Twitter
          18 juillet 2006 à 23:28:37

          Je vous donne quand meme les solutions :
          Solution 1 :
          <?php
          include('./conf.php');

          $link = mysql_connect($mysql_server, $mysql_user, $mysql_pass);
          mysql_select_db($mysql_db) or die("Selection de la basse de donne : Echec");
          $query = "SELECT * FROM insulte";
          $resultquery = mysql_query($query);

          //Les gros mot !
          $texte = 'Merde
          Fuck ah coool'
          ;   

          while($afficheresult = mysql_fetch_assoc($resultquery) ) // tant qu'il y a des enregistrement faire 
          {       
              $insulte = $afficheresult['nom'];
                  $texte = preg_replace('!'.$insulte.'!isU', '*********', $texte); //Tentative de remplacement des gros mots
          }


              echo $texte . '<br />';

          ?>


          Solution 2 :
          <?php
          include('./conf.php');

          $link = mysql_connect($mysql_server, $mysql_user, $mysql_pass);
          mysql_select_db($mysql_db) or die("Selection de la basse de donne : Echec");
          $query = "SELECT * FROM insulte";
          $resultquery = mysql_query($query);

          $bou = '1';
          while($afficheresult = mysql_fetch_assoc($resultquery) ) // tant qu'il y a des enregistrement faire 
          {   
                  if($bou != '1')
                  {     
              $insulte .= '|'.$afficheresult['nom'];
                  }
                  else
                  {
              $insulte .= $afficheresult['nom'];
                  $bou = ';)';
                  }
                  //echo $afficheresult['nom'];
          }

          $message='Salaud, c\'est un petit test pour enlever les fuck des mots interdits, 
          genre enfoirés, connard et bien d\'autres 
          merdes même genre'


          $interdit=$insulte
          $autre='*****'
          $message1 = preg_replace('`\b('.$interdit.')[sx]?\b`si',$autre, $message);     
          echo $message1;   

          ?>


          C'est toujour sympta de savoir la reponse au probleme... Pour les suivants
          • Partager sur Facebook
          • Partager sur Twitter
            18 juillet 2006 à 23:33:28

            utilise str_ireplace au lieu des regex

            désolé bison :p
            • Partager sur Facebook
            • Partager sur Twitter

            Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

              18 juillet 2006 à 23:34:55

              Donc si jamais quelqu'un dit "Je t'emMerde" et ben ça sera remplacé par "Je t'em******", ce qui ne va pas du tout
              J'suis déjà dehors, désolé mais fallait que je la place (mais vous me comprenez non ?) ====> []
              • Partager sur Facebook
              • Partager sur Twitter
                18 juillet 2006 à 23:35:53

                dans ce cas str_ireplace(' merde', ' *****') :p
                • Partager sur Facebook
                • Partager sur Twitter

                Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

                  19 juillet 2006 à 8:25:57

                  str_replace, str_ireplace ne fonctionne pas.
                  Maintenant, si vous pensez que si, testez ceci :

                  <?php
                  $mot=array('con','pute','merde','enfoiré');
                  $change='*****';
                  $phrase='Ah les enfoirés, ils ne veulent pas reconnaître que sans regex, on ne sera pas à l\'abri d\'emmerdements.<br />';

                  // ===== Avec str_replace (ou str_ireplace) =====
                  echo str_replace($mot,$change,$phrase);

                  // ===== La même chose avec preg_replace =====
                  echo preg_replace('`\b('.implode('|',$mot).')[sx]?\b`si',$change, $phrase);
                  ?>


                  CQFD ! ;)
                  Avec l'avantage énorme que l'on peut avec la regex gérer une forme de pluriel. :p
                  Avec str_replace, toutes les versions d'un gros mots devront être présentes. ^^

                  Maintenant pour en revenir au code précédent, je ne comprends pas pourquoi tu met tout ça dans un while.
                  Pour ce genre de truc (pas fiable), perso j'utiliserais un fichier plat. ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 juillet 2006 à 9:17:24

                    Hum avec str_ireplace ça donnera :
                    Ha les *****s, ils ne veulent pas reconnaître que sans regex, on ne sera pas à l'abri d'em*****ments.

                    Mais je rejoins l'avis, ici une regex une nécessaire, c'était juste pour placer ma connerie le str_replace ^^
                    Mais, ce n'est pas très fiable, pour faire une vraie censure, rien ne remplacera des modos (parce que m€rde alors, qu'est-ce que c'est c0n, ce pµtain de truc marche pas)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 juillet 2006 à 9:49:40

                      Citation : A-spec59

                      Hum avec str_ireplace ça donnera :
                      Ha les *****s, ils ne veulent pas reconnaître que sans regex, on ne sera pas à l'abri d'em*****ments.


                      Non, ça donnera ça :
                      Ha les *****s, ils ne veulent pas re*****naître que sans regex, on ne sera pas à l'abri d'em*****ments. ;)

                      De toutes façons, je l'ai dit :
                      ce système n'est pas fiable du tout.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 juillet 2006 à 11:48:08

                        C pour éviter les gros mots principaux comme, biiiiiiip, biiiiiiip, biiiiiiiiip, ...
                        ^^ les biiip
                        <?php
                        $mot=array('con','pute','merde','enfoiré');
                        $change='*****';
                        $phrase='Ah les enfoirés, ils ne veulent pas reconnaître que sans regex, on ne sera pas à l\'abri d\'emmerdements.<br />';

                        // ===== Avec str_replace (ou str_ireplace) =====
                        echo str_replace($mot,$change,$phrase);
                        ?>


                        Ce code parait plus optimisé, maintenant il faut rajouter MySQL car le but et de rendre l'administration des gros mots a toute personne utilisant l'administration de mon site.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          19 juillet 2006 à 11:59:02

                          Je sais pas... j'ai la vague impression que ce que je dis n'est pas clair, pas en français, que mon code est compliqué, illisible, bref, j'ai l'impression de parler dans le vide !!!!!

                          Je répète en grand, en gras et en rouge :
                          str_replace ne fera pas la différence entre un mot isolé et un mot enchassé

                          Donc, si on veut gérer les mots entiers on doit utiliser preg_replace.

                          Là, je vais me coucher ! :(
                          • Partager sur Facebook
                          • Partager sur Twitter
                            19 juillet 2006 à 12:35:24

                            C'est quoi sa : un mot isolé et un mot enchassé ?
                            Et pourquoi tu nous donnera pas une solution ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              19 juillet 2006 à 12:38:07

                              On va voir si je le grille
                              Mot isolé, y a des espaces tout autour, enchassé, c'est par exemple, reconnaitre, dedans y a le mot con qui est enchassé, il est donc à l'intérieur d'un mot
                              La solution a déjà été donnée
                              • Partager sur Facebook
                              • Partager sur Twitter
                                19 juillet 2006 à 12:39:04

                                Citation : blumax

                                C'est quoi sa : un mot isolé et un mot enchassé ?
                                Et pourquoi tu nous donnera pas une solution ?


                                ?????
                                C'est du foutage de gueule là ? :colere2:

                                Ou alors il faut absolument que t'arrête la colle ou le canabis... ou les deux ! :-°
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  19 juillet 2006 à 17:00:01

                                  Ta réflexion était très réfléchi !
                                  Si certaine réponse te dérange t'en que sa, tu peux changer de topique (Bison)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    19 juillet 2006 à 17:14:40

                                    Citation : blumax

                                    Ta réflexion était très réfléchi !
                                    Si certaine réponse te dérange t'en que sa, tu peux changer de topique (Bison)


                                    Pas de problème M'sieur... te laisser mariner dans ta bêtise marquera mon esprit du souvenir d'une bonne action. :-°
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      19 juillet 2006 à 17:41:56

                                      Citation : blumax

                                      Et pourquoi tu nous donnera pas une solution ?



                                      La solution il te l'a donnée... La plus efficace d'ailleurs.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        19 juillet 2006 à 19:44:15

                                        Sa solutio marche, mais avec elle je n'arivera pas a fair venir les donners de MySQL, et je souhait que sa passe par une basse de donnée.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          19 juillet 2006 à 19:46:16

                                          Il suffit de récupérer tes mots dans la bdd, d'en faire un array, puis d'utiliser la code à Bison, rien de bien compliqué ;)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            22 juillet 2006 à 5:35:56

                                            PS: tout ce que j'ai dit comme connerie c'était pour énerver bison :p
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

                                            Variable dans une Regex

                                            × 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