IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Supprimer les retours chariots de trop


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut Supprimer les retours chariots de trop
    Bonjour,
    J'ai une petite question. J'ai un formulaire qui permet aux internautes de publier des témoignages sur le site.
    J'affiche le texte publié de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo nl2br($texte);
    Le problème, c'est que des petits rigolos me font 200 retours chariots à la fois.
    J'aimerais limiter les retours chariots à 2 au maximum à la fois. (phrase + 1 ou 2 maximum retour chariot ensuite phrase etc.)

    Merci beaucoup pour votre aide

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Salut,

    tu peux faire deux choses simples, utiliser trim pour supprimer les blancs inutiles à droite et à gauche du texte.
    Et faire un remplacement d'un double retour chariot par un simple retour chariot avec par exemple une condition du type :

    TANT QUE mon texte contient deux retours chariots
    REMPLACER()
    FIN TANT QUE.

    a plus

  3. #3
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    Tu peux aussi bloquer le retour chariot en amont avec javascript et une expression régulière...

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Citation Envoyé par deY! Voir le message
    Tu peux aussi bloquer le retour chariot en amont avec javascript et une expression régulière...
    Après tu retombes sur le classique problème de la validation des formulaires qui DOIT TOUJOURS (vraiment il n'existe aucune exception) être réalisée sur le serveur et non chez le client.

    a plus

  5. #5
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Bonjour tout le monde,
    Merci bcp Kaymak pour ton explication.
    Malheureusement je ne suis pas très doué donc ne sais pas comment faire le code.

    Pourras-tu m'aider STP ?
    D'avance je te remercie bcp

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut,

    avec les regex, ça peut donner ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    // motif
    $myPattern = '#(\r?\n(\r?\n){0,2})(\r?\n)*#';
     
    // tests
    $myString = 'foo
    foo
    
    foo
    
    
    
    
    
    foo';
     
    print nl2br(preg_replace($myPattern, '$1', $myString));

  7. #7
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Merci beaucoup jml94,

    J'ai copié ton code et ai testé voici le code qui malheureusement affiche le texte avec autant de retours chariots faits

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $requete = " SELECT * FROM essai WHERE IDT= 2";
    $req = mysqli_query(maConnexion(), $requete) or die(mysqli_error());
    $donnee = mysqli_fetch_assoc($req);
    $myString = $donnee['contenu'];
     
    $myPattern = '#(\r?\n(\r?\n){0,2})(\r?\n)*#';
    echo nl2br(preg_replace($myPattern, '$1', $myString));
    D'avance je te remercie pour ton aide.

  8. #8
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Le problème se trouve à cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $myPattern = '#(\r?\n(\r?\n){0,2})(\r?\n)*#';
    et à ce niveau précisement : {0,2}

    lorsque je mets par exemple {0,0} Le retour chariot supérieur à 2 est réduit à 2. Ce qui est correcte.

    Mais le retour chariot égal à 2 n'affiche pas 2 retour chariots mais 1 retour chariot.

    Je ne suis pas doué en expression régulière mais je pense qu'il doit y avoir un petit réglage à ce niveau.

    Merci d'avance pour votre aide

  9. #9
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Pourrais-tu me donner ta chaîne de test stp ?

  10. #10
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Le test un peu mieux expliqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
    // motif
    $myPattern = '/
    (               # capture n°1
    \r?\n           # premier saut de ligne (la fin de ligne) le \r est optionnel (format windows)
    (\r?\n){0,2}    # 0, 1 ou 2 saut de ligne suivants
    )               # fin de capture n°1
    (\r?\n)*        # autant de sauts de ligne à suivre
    /x';
     
    // tests
    $myString = 'foo
    foo
    
    foo
    
    
    
    
    
    
    
    
    
    foo';
     
    print nl2br($myString);
    print "<hr/>";
    print nl2br(preg_replace($myPattern, '$1', $myString));
    Sous unix/linux, le pattern peut être réduit à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $myPattern = '#(\n\n{0,2})\n*#';
    Dis-moi si mon test fonctionne correctement chez toi.

  11. #11
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    J'ai fait le test avec ton code sans rien y changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $myPattern = '#(\r?\n(\r?\n){0,2})(\r?\n)*#';
     
    // tests
    $myString = 'foo
    foo
     
    foo
     
     
     
     
     
    foo';
     
     
     
    $myPattern = '#(\r?\n(\r?\n){0,2})(\r?\n)*#';
    echo nl2br(preg_replace($myPattern, '$1', $myString));
    Voici le résultat en image :

    foo
    foo

    foo





    foo
    Il y a un paramètre qui n'est pas bien traité. Je ne vois pas où ça se trouve {0,2}

    Merci bcp de ton aide. Et merci d'avance de m'éclairer

  12. #12
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut, je t'avoue sécher un peu.
    As-tu essayé la version unix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $myPattern = '#(\n\n{0,2})\n*#';
    Tu n'es pas sur Mac au moins ?

  13. #13
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    La version unix ne marche pas non plus.

    Je suis sur windows XP Avec wampServer

  14. #14
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Pourrais-tu me donner le résultat de cette comande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $requete = " SELECT * FROM essai WHERE IDT= 2";
    $req = mysqli_query(maConnexion(), $requete) or die(mysqli_error());
    $donnee = mysqli_fetch_assoc($req);
    $myString = $donnee['contenu'];
     
    var_dump($myString);
     
    var_dump(nl2br($myString));
     
    /* 
    $myPattern = '#(\r?\n(\r?\n){0,2})(\r?\n)*#';
    echo nl2br(preg_replace($myPattern, '$1', $myString));
    */

  15. #15
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Le résultat est sur la même ligne. Voici exactement ce qui est affiché :

    string(230) "Au Nord-Ouest de l’Inde, dans l’actuel Pakistan, la vallée de l’Indus et les contreforts du Beluchistan ont révélé quelques-uns des sites pré et protohistoriques les plus importants et anciens du sous-continent indien,"
    Voici le texte tel qu'il apparait dans la base de données :

    Au Nord-Ouest de l’Inde, dans l’actuel Pakistan, la vallée de l’Indus et les

    contreforts du Beluchistan ont révélé quelques-uns des sites pré et




    protohistoriques les plus importants et anciens du sous-continent indien,

  16. #16
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    essaies cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?
    $test = "Au Nord-Ouest de l’Inde, dans l’actuel Pakistan, la vallée de l’Indus et les
    
    contreforts du Beluchistan ont révélé quelques-uns des sites pré et
    
    
    
    
    protohistoriques les plus importants et anciens du sous-continent indien,";
    $myPattern = '#(\r\n|\r|\n){2,}#';
     
    $test = preg_replace($myPattern, "\r\n", $test);
    $test=nl2br($test);
    var_dump($test);
    ?>
    jml94, je pense que tu te perds un peu dans l'ensemble des cas possible de la regexp, alors j'ai essayé de voir plus simple.

    Cependant je n'ai pas réussit à garder un double retour chariot..

  17. #17
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Ceci marche correctement chez moi, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    ?php
    // motif
    $myPattern = '/
    (               # capture n°1
    \r?\n           # premier saut de ligne (la fin de ligne) le \r est optionnel (format windows)
    (\r?\n){0,2}    # 0, 1 ou 2 saut de ligne suivants
    )               # fin de capture n°1
    (\r?\n)*        # autant de sauts de ligne à suivre
    /x';
     
    // tests
    $myString = 'Au Nord-Ouest de l’Inde, dans l’actuel Pakistan, la vallée de l’Indus et les
     
    contreforts du Beluchistan ont révélé quelques-uns des sites pré et
     
     
     
     
    protohistoriques les plus importants et anciens du sous-continent indien, ';
     
    print nl2br($myString);
    print "<hr/>";
    print nl2br(preg_replace($myPattern, '$1', $myString));

  18. #18
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Ceci marche correctement chez moi, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    ?php
    // motif
    $myPattern = '/
    (               # capture n°1
    \r?\n           # premier saut de ligne (la fin de ligne) le \r est optionnel (format windows)
    (\r?\n){0,2}    # 0, 1 ou 2 saut de ligne suivants
    )               # fin de capture n°1
    (\r?\n)*        # autant de sauts de ligne à suivre
    /x';
     
    // tests
    $myString = 'Au Nord-Ouest de l’Inde, dans l’actuel Pakistan, la vallée de l’Indus et les
     
    contreforts du Beluchistan ont révélé quelques-uns des sites pré et
     
     
     
     
    protohistoriques les plus importants et anciens du sous-continent indien, ';
     
    print nl2br($myString);
    print "<hr/>";
    print nl2br(preg_replace($myPattern, '$1', $myString));
    ben moi c'est complètement pareil :% Quelle sont vos versions de php ?

  19. #19
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Voici la version de ma configuration:
    Version de Apache: 2.2.6
    Version de PHP: 5.2.5
    Moi lorsque je copie votre code tel qu'il est, j'ai ceci comme réponse:
    Au Nord-Ouest de l’Inde, dans l’actuel Pakistan, la vallée de l’Indus et les

    contreforts du Beluchistan ont révélé quelques-uns des sites pré et




    protohistoriques les plus importants et anciens du sous-continent indien,
    --------------------------------------------------------------------------------
    Au Nord-Ouest de l’Inde, dans l’actuel Pakistan, la vallée de l’Indus et les

    contreforts du Beluchistan ont révélé quelques-uns des sites pré et




    protohistoriques les plus importants et anciens du sous-continent indien,

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/12/2010, 17h49
  2. Supprimer les retours chariots d'une chaine de caractère
    Par Seb33300 dans le forum Général VBA
    Réponses: 3
    Dernier message: 31/01/2009, 22h50
  3. supprimer les retour chariot
    Par battit64 dans le forum VBA Word
    Réponses: 2
    Dernier message: 26/03/2008, 16h42
  4. Supprimer les retours chariots d'une chaine
    Par alexdfr dans le forum Delphi
    Réponses: 7
    Dernier message: 03/10/2006, 09h57
  5. Réponses: 1
    Dernier message: 11/01/2006, 11h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo