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 plusieurs sauts à la ligne


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut Supprimer plusieurs sauts à la ligne
    Bonjour,

    Je viens de créer un bbcode de tableaux pour mon site d'articles et je m'aperçois d'un problème lorsque je créé un tableau. Par exemple quand je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [tableau]
    [ligne][cellule]Titre 1[/cellule][cellule]Titre 2[/cellule][cellule]Titre 3[/cellule][/ligne]
    [ligne] [cellule]Contenu 1[/cellule] [cellule]Contenu 2[/cellule] [cellule]Contenu 3[/cellule] [/ligne]
    [/tableau]
    Ce qui donne logiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <table><br>
    <tr><td>Titre 1</td><td>Titre 2</td><td>Titre 3</td></tr><br>
    <tr><td>Contenu 1</td><td>Contenu 2</td><td>Contenu 3</td></tr><br>
    </table>
    Mais comme ce qui se trouve en dehors des balise td et tr remonte et se place avant le tableau au moment de l'affichage, je vois donc ceci dans le code source:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <br>
    <br>
    <br>
    <table>
    <tr><td>Titre 1</td><td>Titre 2</td><td>Titre 3</td></tr>
    <tr><td>Contenu 1</td><td>Contenu 2</td><td>Contenu 3</td></tr>
    </table>
    Quelqu'un peu m'aider çà créer une regex qui puisse me débarrasser de ces <br> à l'intérieur de mon tableau ?

    PS: Notez que des fois les <br> peuvent êtres séparés par un ou plusieurs espaces, tabulation, saut à la ligne, donc si c'est possible la regex devra aussi traiter ce genre de situation.

    Merci d'avance de m'accorder un petit peu de votre temps pour régler mon petit problème que je n'arrive pas à régler moi même étant allergique aux regex .

    EDIT :
    Je crois avoir trouvé une piste qui consiste à agir directement sur le bbcode, je fais donc ceci:

    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
    30
    31
    32
    33
    34
    35
     
    <?php
     
     
    $chaine= "[tableau]
    [ligne] 
    [cellule]Contenu 1[/cellule] 
    [cellule]Contenu 2[/cellule] 
    [cellule]Contenu 3[/cellule] 
    [/ligne]
    [ligne] 
    [cellule]Contenu 1[/cellule] 
    [cellule]Contenu 2[/cellule] 
    [cellule]Contenu 3[/cellule] 
    [/ligne]
    [ligne] 
    [cellule]Contenu 1[/cellule]
    [cellule]Contenu 2[/cellule] 
    [cellule]Contenu 3[/cellule]
    [/ligne]
    [/tableau] ";
     
     
    $chaine = preg_replace('#[tableau](\r\n|\n|\r)[ligne]#','[tableau][ligne]',$chaine);
    $chaine = preg_replace('#[ligne](\r\n|\n|\r)[cellule]#isU','[ligne][cellule]',$chaine);
    $chaine = preg_replace('#[/cellule](\r\n|\n|\r)[cellule]#isU','[/cellule][cellule]',$chaine);
    $chaine = preg_replace('#[/cellule](\r\n|\n|\r)[/ligne]#isU','[/cellule][/ligne]',$chaine);
    $chaine = preg_replace('#[/ligne](\r\n|\n|\r)[ligne]#isU','[/ligne][ligne]',$chaine);
    $chaine = preg_replace('#[ligne](\r\n|\n|\r)[celluletitre]#isU','[ligne][celluletitre]',$chaine);
    $chaine = preg_replace('#[/celluletitre](\r\n|\n|\r)[celluletitre]#isU','[/celluletitre][celluletitre]',$chaine);
    $chaine = preg_replace('#[/celluletitre](\r\n|\n|\r)[/ligne]#isU','[/celluletitre][/ligne]',$chaine);
     
    echo $chaine;
     
    ?>
    Mais ça ne fonctionne pas !! quelqu'un peut-il m'aider ?
    Merci.

  2. #2
    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,

    J'avoue ne pas comprendre le bbcode de départ : tu dis que les <br/> sont ajoutés logiquement, mais je ne vois pas en quoi cet ajout est logique.
    Quelle est la balise bbcode qui ajoute ces <br/> ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 30
    Points
    30
    Par défaut
    En effet d'après le code ci-dessus il n'y aura pas de br, mais en entrant ce le bbcode dans un textarea et qu'on l'envoie avec un POST et bien là il y aura des br, et c'est ce que fait justement mes membres.

    sinon j'ai trouvé la cause de mon problème, j'ai en fait oublié de rajouter '\' dans ma regex: au lieu de ça \[cellule\] je fesai ceci [cellule].

    Mercci quand même

    EDIT:

    Finalement je ne suis pas sorti de la berge (comme dit gad el maleh )

    En fait quand je fais:

    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
    30
    31
    32
    33
    34
    35
    36
    <?php
     
    $chaine= "[tableau]
    [ligne] 
    [celluletitre]Contenu 1[/celluletitre] 
    [celluletitre]Contenu 2[/celluletitre] 
    [celluletitre]Contenu 3[/celluletitre] 
    [/ligne]
    [ligne] 
    [cellule]Contenu 1[/cellule] 
    [cellule]Contenu 2[/cellule] 
    [cellule]Contenu 3[/cellule] 
    [/ligne]
    [ligne] 
    [cellule]Contenu 1[/cellule]
    [cellule]Contenu 2[/cellule] 
    [cellule]Contenu 3[/cellule]
    [/ligne]
    [/tableau] ";
     
    $chaine = preg_replace('#\[tableau\](\r\n|\n|\r)\[ligne\]#is','[tableau][ligne]',$chaine);
    $chaine = preg_replace('#\[ligne\](\r\n|\n|\r)\[cellule\]#isU','[ligne][cellule]',$chaine);
    $chaine = preg_replace('#\[/cellule\](\r\n|\n|\r)\[cellule\]#isU','[/cellule][cellule]',$chaine);
    $chaine = preg_replace('#\[/cellule\](\r\n|\n|\r)\[/ligne\]#isU','[/cellule][/ligne]',$chaine);
    $chaine = preg_replace('#\[/ligne\](\r\n|\n|\r)\[ligne\]#is','[/ligne][ligne]',$chaine);
    $chaine = preg_replace('#\[ligne\](\r\n|\n|\r)\[celluletitre\]#is','[ligne][celluletitre]',$chaine);
    $chaine = preg_replace('#\[/celluletitre\](\r\n|\n|\r)\[celluletitre\]#is','[/celluletitre][celluletitre]',$chaine);
    $chaine = preg_replace('#\[/celluletitre\](\r\n|\n|\r)\[/ligne\]#is','[/celluletitre][/ligne]',$chaine);
    $chaine = preg_replace('#\[/ligne\](\r\n|\n|\r)\[/tableau\]#is','[/ligne][/tableau]',$chaine);
     
    echo $chaine;
     
     
    ?>
    <br />
    <textarea cols=90 rows=10 ><?php echo $chaine; ?></textarea>
    La regex ne traite que les balises se trouvant seuls sur une ligne, par exemple :
    [tableau]
    [ligne]
    devient
    [tableau][ligne]

    Mais pas :
    [ligne]
    [cellule]Contenu 1[/cellule]
    qui devrait devenir
    [ligne][cellule]Contenu 1[/cellule]

    J4ai encore besoin d'aide !!!

  4. #4
    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
    Si j'ai bien compris, tu préfères ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $chaine = preg_replace('#\[tableau\]\s*\[ligne\]#is','[tableau][ligne]',$chaine);
    $chaine = preg_replace('#\[ligne\]\s*\[cellule\]#isU','[ligne][cellule]',$chaine);
    $chaine = preg_replace('#\[/cellule\]\s*\[cellule\]#isU','[/cellule][cellule]',$chaine);
    $chaine = preg_replace('#\[/cellule\]\s*\[/ligne\]#isU','[/cellule][/ligne]',$chaine);
    $chaine = preg_replace('#\[/ligne\]\s*\[ligne\]#is','[/ligne][ligne]',$chaine);
    $chaine = preg_replace('#\[ligne\]\s*\[celluletitre\]#is','[ligne][celluletitre]',$chaine);
    $chaine = preg_replace('#\[/celluletitre\]\s*\[celluletitre\]#is','[/celluletitre][celluletitre]',$chaine);
    $chaine = preg_replace('#\[/celluletitre\]\s*\[/ligne\]#is','[/celluletitre][/ligne]',$chaine);
    $chaine = preg_replace('#\[/ligne\]\s*\[/tableau\]#is','[/ligne][/tableau]',$chaine);
    Mais je crois que ça correspond à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = preg_replace('#\]\s*\[#is','][',$chaine);

Discussions similaires

  1. [RegEx] Supprimer plusieurs sauts de ligne
    Par thunderfear dans le forum Langage
    Réponses: 6
    Dernier message: 13/02/2010, 18h35
  2. Supprimer les sauts de ligne d'un textbox rempli
    Par Sytchev3 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 10/01/2007, 16h33
  3. Plusieurs sauts de ligne à la suite
    Par gedeon555 dans le forum Mise en forme
    Réponses: 3
    Dernier message: 28/12/2006, 20h28
  4. [C# 1.1] Comment supprimer un saut de ligne
    Par foolsky dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 26/04/2006, 18h28
  5. Supprimer un saut de ligne
    Par spikto dans le forum Langage
    Réponses: 1
    Dernier message: 28/11/2005, 21h54

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