Rechercher : dans
Par :

[PHP] <br /> et sauts de lignes

Dernière réponse le 4 jui 2006 à 16:59:29 ekra, le 3 jun 2006 à 09:45:15 
 Signaler ce message aux modérateurs

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 !

Meilleures réponses pour « [PHP]
et sauts de lignes
 » dans :
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha-Bang Premièrement,...
Les balises HTML VoirHTML, un langage à balises Le HTML n'est pas un langage de programmation. Il s'agit d'un langage permettant de décrire la mise en page et la forme d'un contenu rédigé en texte simple. Une page HTML est ainsi un simple fichier texte...

1

Choc, le 3 jun 2006 à 13:33:43

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..

Répondre à Choc

2

ekra, le 3 jun 2006 à 14:01:53

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 !

Répondre à ekra

3

PhP, le 3 jun 2006 à 15:08:47

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>

PhP  
Il y a 10 types de personnes dans le monde : ceux qui comprennent le binaire et les autres ...

Répondre à PhP

4

ekra, le 3 jun 2006 à 16:51:56

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 :)

Répondre à ekra

5

PhP, le 3 jun 2006 à 18:08:40

Ici bien sûr !

http://fr.php.net/manual/fr/reference.pcre.pattern.syntax.ph­p

PhP  
Il y a 10 types de personnes dans le monde : ceux qui compre­nnent le binaire et les autres ...

Répondre à PhP

6

ekra, le 3 jun 2006 à 18:14:17

Merci !!

Répondre à ekra

7

ekra, le 11 jun 2006 à 18:11:15

Pardon 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é !

Répondre à ekra

9

 ekra, le 4 jui 2006 à 16:59:29

Ne serai-ce pas : /<br\s*\/>([\n\s]*<br\s*\/>)+/si et non /<br\s*\/>[\n\s]*<br\s*\/>+/si ? Vive Linux, les vacances et les gauffres !

Répondre à ekra

8

Yvan, le 11 jun 2006 à 20:59:50

Un bon site sur les regex.

http://www.expreg.com/index.php

Répondre à Yvan