Expression réguliere : Enlever les <br> en des balises

WRInaute occasionnel
Bonjour,

Je m'arrache les cheuveux depuis quelques heures sur une application qui vue de haut parrait pourtant simple :

j'ai un texte contenant des retours chariots et des balises [xxx] et [/xxx].

Je souhaiterait retourner ce texte en mettant ce qui est entre les balises [xxx] dans un champs textarea. Jusque la rien de compliqué, je fait donc :

Code:
$texte=nl2br($texte);
$texte = preg_replace('!\[xxx\](.+)\[/xxx\]!Uis',"<textarea> $1 </textarea>",$texte); 
echo $texte;

Tout se passe bien sauf que dans le champs texte area, il m'affiche biensure des <br /> qui on été insérés par nl2br et qui ne sont pas interprétés puisque c'est dans une textearea...

Par exempe, si
Code:
$texte ='bla
bla
bla
[xxx]bli
bli
bli[/xxx]
bla
bla';

il m'affichera :
bla
bla
bla
{ici le début du textearea...}
bli<br />
bli<br />
bli
{ici la fin du textearea...}
bla
bla

Je cherche donc a ce qu'il n'y ai pas ce <br /> dans la textearea...

J'ai essayé toutes sortes debidouilles du genre
Code:
 $texte = preg_replace('!\[code\](.*)<br />(.*)\[/code\]!Uis',"[code]$1 $2
",$texte); [/code]mais n'étant pas tres a l'aise avec les expressions régulieres je n'ai pas réussit a obtenir le résultat recherché, c'est a dire :
bla
bla
bla
{ici le début du textearea...}
bli
bli
bli
{ici la fin du textearea...}
bla
bla

Quelqu'un a une idée ?

Merci d'avance pour votre aide,
Robin
 
WRInaute accro
j'ai bien une petite idée, a voir ce qui se passe en sortie 8)

Code:
$texte = preg_replace("#[code](.*)
#esi","''.str_replace('<br />','','\\1').''", $texte );[/code]
 
WRInaute occasionnel
medium69 a dit:
julienr a dit:
$texte = str_replace( '<br />', '', $texte ); ?

+1

Je crois qu'il n'y à pas plus simple sur ce coup là ;)
non car je veux avoir les <br /> pour la mise en forme du texte, sauf dans les textearea dans lesquelles je souhaites des simples retours chariot.

Et ce script retire les <br /> dans tout le texte.

KOogar>> effectivement, je n'avais pas pensé a l'option e, c'est bon ca marche ! merci.

J'ai juste pris la fonction preg_replace_callback a la place de preg_replace pour eviter de jongler avec les guillemets, donc au final, si ca interresse quelqu'un, voila ce que ca donne :

Code:
	function FonctSuppreBr($capture){ 
	global $haut_txtarea,$bas_txtarea; 
	   $texte = $haut_txtarea .eregi_replace('<br />','',$capture[1]). $bas_txtarea;
	   return $texte; 
	} 


$haut_txtarea="<textarea...>";
$bas_txtarea="</textarea>";

$texte = preg_replace_callback('#\[xxx\](.*?)\[/xxx\]#si',"FonctSuppreBr",$texte);

Merci encore !
 
WRInaute occasionnel
julienr a dit:
Code:
$texte = $haut_txtarea .eregi_replace('<br />',"\n",$capture[1]). $bas_txtarea;
non?
en fait dans mon cas non car les retours chariots sont déja présent a la base donc j'ai juste a supprimer les <br />
 
Discussions similaires
Haut