[PHP] <br /> et sauts de lignes

Résolu
Bonjour à tous,

Une fois de plus, je sollicite votre aide !

Je vous explique la situation :
Quelqu'un (un visiteur par exemple) rentre du texte dans un formulaire.

Mon but : remplacer 2 sauts de ligne par un nouveau paragraphe.

                $balises1 = array("<br /><br />");
		$balises2 = array("</p><p>");
		$contenu='<p>'.str_replace($balises1, $balises2, nl2br(htmlentities($contenu,ENT_QUOTES,"utf-8"))).'</p>';


Dans ma base de donnée, on stockera "$contenu" (le texte est donc maintenant sous forme HTML)

Le problème c'est que le "nl2br()" (remplacement de "entré" par <br />) remplace deux saut de ligne par :
blablabla<br />
<br />
blablabla ligne après 2 "entré"


Donc les deux <br /> ne sont pas collés ! Du coup il mon fonction ne les remplace pas.

Pourriez-vous m'aider ?
Merci d'avance !

4 réponses

  1. Peut être en mettant une fin de ligne dans $balises1.
    $balises1 = array("<br />\r<br />");

    Ou
    $balises1 = array("\n\r\n\r");

    M'enfin, peut-être que je dis une connerie..
    1. Bonjour,

      D'abord merci de ta réponse, mais malheuresement, ceci n'a pas résolu mon problème...
      J'ai essayé "<br />\n<br />" et "<br />\r<br />" :(

      voici le code enregistré sur la base de données :
      <p>Premier paragraphe. Phrase qui sert &agrave; rien.<br />
      <br />
      Deuxi&egrave;me paragraphe.<br />
      <br />
      Troisi&egrave;me.</p>


      Si vous avez d'autres idées, merci !
      1. Bjr

        Et avec une expression régulière ?

        par ex

        <html>
        <body>
        <?php
        $pattern = '/<br\s*\/>[\n\s]*<br\s*\/>+/si';
        $replacement = '</p><p>';
        
        $contenu ="<p>Premier paragraphe. Phrase qui sert &agrave; rien.<br />\n".
        		"<br/>".
        		"Deuxi&egrave;me paragraphe.<br />".
        		"<br />".
        		"Troisi&egrave;me.</p>";
        
        echo preg_replace($pattern, $replacement, $contenu);
        ?>
        </body>
        </html>

        1. Bonjour,

          Merci ! Ca marche au poil !

          Sinon, en ce qui concerne les chaînes du type "pattern" que tu m'as donné (comme '/<br\s*\/>[\n\s]*<br\s*\/>+/si') ou pourrais-je savoir comment en faire d'autres ?

          J'ai cru reconnaître :
          \s* : autant d'espaces qu'on veut
          [jkjk]*: autant de caractères qu'on veut contenus dans les crochets

          après
          +/si : aucune idée....
          / (d'introduction): pareil
          Ou pourrais-je trouver de l'aide pour ces "tags".

          Merci :)
        2. @ekraPardon de te déranger une fois de plus Php.

          J'ai lu pas mal de documentation sur les expression régulière (vu que ça à l'air bien pratique), mais il y a certaines choses que je voudrais que tu m'éclaires :
          /<br\s*\/>[\n\s]*<br\s*\/>+/si


          - je ne comprends pas le sens de "+" ici. Normalement il veut dire "j'en veux au moins une fois", mais c'est le ">" précédent qui doit y être au moins une fois ? Si oui pourquoi ne pas l'avoir mis sur les autres ">" ?
          - Je n'ai pas trouvé la signification de "/si".

          En tout cas, merci déjà de m'avoir aidé !
        3. @ekraNe serai-ce pas : /<br\s*\/>([\n\s]*<br\s*\/>)+/si et non /<br\s*\/>[\n\s]*<br\s*\/>+/si ?