8792 sujets

Développement web côté serveur, CMS

Salut a tous!

je voudrais utiliser cette fonction pour une textarea qui permet de faire des news sur mon site

voila ce que j'aimerais faire avec:

jevoudrais que pour mon text par exemple pour un retour a la ligne il me laisse le <br />

et que pour 2 retour a la ligne il me le transforme en paragraphe
exemple:

blablablablablablablablabla<br \>
blablablablablablablablabla<br \><br \>
paragraphe paragraphe paragraphe paragraphe

que ca me donne

<p>blablablablablablablablabla<br \>
blablablablablablablablabla</p>
<p>paragraphe paragraphe paragraphe paragraphe</p>

si bien sur ce la est possible..

et la fonction inverse aussi eventuellement pour pouvoir modifier la news si besoins est Smiley cligne

Cordialement Smiley ravi
Modifié par StyleSho (24 Jul 2006 - 01:43)
Bonjour,
Premièrement, attention : ce n'est pas <br \> mais bien <br />

Sinon, je pensais à :
$chaine = '<p>'.preg_replace('#<br /><br />#si', '</p><p>', $chaine).'</p>';
nan ca marche pas Smiley ohwell

ca vient peut etre du fait que les br parfois ne sont pas coller du style

<p>sdfsdfsdfsdfsdf
<br />
<br />sdfsdfsdfsdfsdfsdf
<br />
<br />sdfsdfsdfsdfsdf
<br />sdfsdfsdf</p>
Comment obtiens-tu tes <br /> ?

Si tu procèdes de la façon suivante, ça ne devrait pas poser de problème :
// Récupération de la valeur du textarea
$chaine = $_POST['monTextarea'];

// Suppression des caractères vides en début et en fin de chaine
$chaine = trim($chaine);

// Remplacement des sauts de ligne par des <br />
$chaine = nl2br($chaine);

// Remplacement des <br /> consécutifs par des marques de paragraphes
$chaine = preg_replace('/(<br \/>){2,}/', '</p><p>', $chaine);
$chaine = '<p>'.$chaine.'</p>';

J'ai volontairement détaillé un peu le code, et réécrit à ma sauce la méthode (qui me semble correcte) de Quentin. Une petite différence : je gère le cas où l'utilisateur aurait sauté plus de 2 lignes consécutives.
Sinon tu peux toujours procéder ainsi :
// Suppression des sauts de lignes restant après ajout de <br />
$chaine = preg_replace('/\r\n|\n|\r/', '', $chaine);

// Remplacement des <br /> consécutifs par des marques de paragraphes
$chaine = preg_replace('/(<br \/>){2,}/', '</p><p>', $chaine);
$chaine = '<p>'.$chaine.'</p>';

Modifié par 84mickael (24 Jul 2006 - 14:26)
ca ne marche pas vraiment ca me fait

<p>sdsdsdsdsd<br />
sdsdsd<br />
s<br />
<br />
<br />
sdsdsdsd</p>
En utilisant le motif :

<br />([\s]*)<br />


A la place de
<br /><br />

Modifié par Olivier (25 Jul 2006 - 03:01)
Merci!!!! olivier!!! ca marche nikel Smiley cligne

Derniere petite demande, ca je sais pas si ca va etre possible de le faire, ca serait que ce system s'applique a chaque fois sauf si il trouve une balise de type titre <hx></hx>


<p>gdsfgsdkfjlgksjdlfmkjgsdfg</p>
<p>
sdfgsdlfglsdkjglskdjfgsdfg</p>
<p>
sdfglksjdflgkjsmdlfjgmlsdkfg</p>
<p>
<h5>Titre</h5><br />
sdfsdfsdfsdfsdfsdfsdfsdfsdf</p>


se tranforme en


<p>gdsfgsdkfjlgksjdlfmkjgsdfg</p>
<p>
sdfgsdlfglsdkjglskdjfgsdfg</p>
<p>
sdfglksjdflgkjsmdlfjgmlsdkfg</p>

<h5>Titre</h5>
<p><br />
sdfsdfsdfsdfsdfsdfsdfsdfsdf</p>

Modifié par StyleSho (25 Jul 2006 - 08:34)
Hm, un truc du style :


$chaine = preg_replace([<h[\d]>], '</p>' . \\0, $chaine);
$chaine = preg_replace([</h[\d]>[\s]*<br />], \\0 . '<p>', $chaine);
$chaine = preg_replace(<p>[\s]*</p>, '', $chaine);


(fais vite fait à l'arrache sans tester)