Melange de bbcode et html avec la fonction "nl2br" [résolu]

Melange de bbcode et html avec la fonction "nl2br" [résolu] - PHP - Programmation

Marsh Posté le 03-01-2004 à 17:10:49    

Bonjour a tous,
 
Voila je me retrouve face a un petit probleme.
J'ai un texte dans la base que je sors en faisant un $var = nl2br($var) ; pour ajouter des saut de lignes.
 
Mais la ou ca cloche, c'est quand je veux ajouter un peux de html.
Car du coup, il me met un <br> entre les balides.
 
Y a t il un moyen d'utiliser nl2br partout sauf entre deux indicateurs. Pour moi, les indicateur serait <body> et </body> car j'ai ces balises en debut/fin de code html.
 
merci


Message édité par bodbod le 09-01-2004 à 22:20:59
Reply

Marsh Posté le 03-01-2004 à 17:10:49   

Reply

Marsh Posté le 03-01-2004 à 17:13:57    

le nl2br fait le sur le texte avant de l'insérer dans la base

Reply

Marsh Posté le 03-01-2004 à 17:16:15    

oui mais en fait, pour entrer dans la base ainsi que pour editer le texte, je passe par un texte area qui de coup se retrouve avec du bbcode et du html melangé

Reply

Marsh Posté le 03-01-2004 à 17:17:14    

ha, dans le textarea fait un str_replace("<br />","",$ton_texte);

Reply

Marsh Posté le 03-01-2004 à 17:17:47    

Je precise que le bbcode sera toujours hors des balises <body>

Reply

Marsh Posté le 03-01-2004 à 17:18:31    

bodbod a écrit :

Je precise que le bbcode sera toujours hors des balises <body>


 
pourquoi cela ?
le contenu doit toujours se trouver dans le body !

Reply

Marsh Posté le 03-01-2004 à 17:20:44    

Bon alors on ne se comprend pas trop.
Voici une partie du texte dans la base :
 
[taille=grand][align=centre]Limoges avril 2004[/align][/taille]<br>
<body vlink="#0000FF" bgcolor="#FFFDF2" leftMargin=0 topMargin=0 rightMargin=0>
        <TABLE width=100% border=0 align="center" cellPadding=0
 
 ...
 
            </TR>
          </TBODY>
        </TABLE>
</body>

Merci de votre compréhension ;)
[color=#FF0000] SONDAGE REOUVERT,
VOUS POUVEZ Y ALLER MAINTENANT ;)[/color]
 
[taille=petit]Organisateurs : mmarques et mr_alexxxx
Gestion : mmarques
[/taille]

 
 
 
bbcode
htmle


Message édité par bodbod le 03-01-2004 à 17:25:26
Reply

Marsh Posté le 03-01-2004 à 17:20:45    

bodbod a écrit :

oui mais en fait, pour entrer dans la base ainsi que pour editer le texte, je passe par un texte area qui de coup se retrouve avec du bbcode et du html melangé


 
ben apres à l'edition entre les balises textarea tu mets :
<? echo str_replace("<br />","",$tontexte); ?>


---------------
Hey! You wanna dance?
Reply

Marsh Posté le 03-01-2004 à 17:23:05    

bodbod a écrit :

Bon alors on ne se comprend pas trop.
Voici une partie du texte dans la base :
 
[taille=grand][align=centre]Limoges avril 2004[/align][/taille]<br>
<body vlink="#0000FF" bgcolor="#FFFDF2" leftMargin=0 topMargin=0 rightMargin=0>
        <TABLE width=100% border=0 align="center" cellPadding=0
 
 ...
 
            </TR>
          </TBODY>
        </TABLE>
</body>

Merci de votre compréhension ;)
[color=#FF0000] SONDAGE REOUVERT,
VOUS POUVEZ Y ALLER MAINTENANT ;)[/color]<br><br>
 
[taille=petit]Organisateurs : mmarques et mr_alexxxx<br>
Gestion : mmarques
[/taille]

 
 
 
bbcode
htmle
 


 
Pourquoi réouvrir un <body>, j'imagine qu'il doit etre deja ouvert non ?

Reply

Marsh Posté le 03-01-2004 à 17:23:38    

kyle a écrit :


 
pourquoi cela ?
le contenu doit toujours se trouver dans le body !

En fait c'est une partie de code qui est inclue dans une autre page. Et sans passer par les balise <body>, les tableau sont tout deformé.
En mettant les balide, ca revient un peu a faire un include

Reply

Marsh Posté le 03-01-2004 à 17:23:38   

Reply

Marsh Posté le 03-01-2004 à 17:27:03    

kyle a écrit :


 
Pourquoi réouvrir un <body>, j'imagine qu'il doit etre deja ouvert non ?

Oui mais en mettant le html sans les balise, les tableau sont tout deformé.
En fait, c'est un tableau qui entre dans d'autre tableau.

Reply

Marsh Posté le 03-01-2004 à 17:28:58    

bodbod a écrit :

En fait c'est une partie de code qui est inclue dans une autre page. Et sans passer par les balise <body>, les tableau sont tout deformé.
En mettant les balide, ca revient un peu a faire un include


 
pas tres propre tout ca  :sweat:  
si tes tableaux sont explosés c'est qu'il y a un probleme de montage de la page...

Reply

Marsh Posté le 03-01-2004 à 17:31:39    

kyle a écrit :


 
pas tres propre tout ca  :sweat:  
si tes tableaux sont explosés c'est qu'il y a un probleme de montage de la page...

Ben oui mais le probleme, c'est que c'est pas moi qui est fait le code html
 
Ou sinon, c'est un peu de la bidouille, mais y a t il un moyen d'enlever le <br> qui pourrait se trouver entre les deux balides.
Tu voix ce que je veux dire :
Selection la partie qui se trouve entrre <body> et y remplcer tout les <br>

Reply

Marsh Posté le 03-01-2004 à 17:33:21    

on te l'a dit plus haut 2 fois :
 
<textarea><? echo str_replace("<br />","",$tontexte); ?></textarea>

Reply

Marsh Posté le 03-01-2004 à 17:37:40    

kyle a écrit :

on te l'a dit plus haut 2 fois :
 
<textarea><? echo str_replace("<br />","",$tontexte); ?></textarea>

on se comprend pas trop  :sweat:  
En fait une partie du textarea dois avoir les <br>(bbcode) et l'autre partie ne dois pas en avoir (html)

Reply

Marsh Posté le 04-01-2004 à 11:07:40    

Bon apres qq heure, j'ai ete obligé de bidouiller un truc qui me plait que moyennement mais comme ca marche.
 
Je passe d'abord un nl2br au debut,
ca met un <br /> a chaque retour.
Ensuite je remplace le ><br /> par > qui a pour effet de supprimé le <br /> qui se trouve a travers le code html et le tour est joué.
 
Seul contrainte, avoir un code html propre pour que chaque ligne finnissent par un >
 
merci ;)


Message édité par bodbod le 04-01-2004 à 11:08:36
Reply

Marsh Posté le 04-01-2004 à 12:28:15    

ske tu peux peut-etre faire c'est un nouveau tag genre [html] et tout ce qui est dedans tu ne lui appliques pas de nl2br();


---------------
Hey! You wanna dance?
Reply

Marsh Posté le 04-01-2004 à 16:16:16    

chamois a écrit :

ske tu peux peut-etre faire c'est un nouveau tag genre [html] et tout ce qui est dedans tu ne lui appliques pas de nl2br();

Comment tu fais ca ?
C'est en fait ce que je cherche


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 07-01-2004 à 20:42:14    

dans la base, tu enregistres le code avec le sauts de lignes bruts, saisis depuis le textarea
 
juste avant un affichage, faut passer nl2br, sauf si l'affichage se fait dans un textarea

Reply

Marsh Posté le 07-01-2004 à 21:05:41    

non ben vous avez pas l'air d'avoir compris mon expliquation. Surement moi qui m'exprime mal.
 
Voici un exemple de texte dans le textarea :

Code :
  1. texte
  2. [color=couleur]texte[/color]
  3. <table>
  4.   <tr>
  5.     <td>trucmuche</td>
  6.   </tr>
  7. </table>
  8. texte2
  9. [color=couleur]texte3[/color]
  10. ...
  11. et pourquoi encore du html ici...


Et la on voit bien que les <br> vont trainer a travers le html mais sera tres bien placé dans le bbcode situé au debut et a la fin


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 08-01-2004 à 02:22:04    

preg_replace(#(l'expression qui matche jusque ta table)(<table.../table> )(le reste)#(ici faut mettre le code pour qu'il interprète la chaine de sortie),nl2br($1).$2.nl2br($3),$tontext)
 
C'est méga lour à lire , je sais mais ça marche. Cherche un peu.

Reply

Marsh Posté le 08-01-2004 à 20:56:59    

$var = preg_replace("#(XX|</table> )(.*?)(<table> )(.*?)(</table> )(.*?)(<table>|YY)#si", $1.nl2br($2).$3.$4.nl2br($6).$6, $var);
 
Un truc qui ressemblerai un peu a ca ?
 
Par contre, a XX et YY, je sais pas trop quoi mettre XX correspondrai au debut debut et YY a la fin.
Si j'ai mis les XX|</table> et l'autre, c'est pour prevoir le melange de plsieur partie bbcode html.


Message édité par bodbod le 08-01-2004 à 20:58:40

---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 09-01-2004 à 00:11:48    

je crois qu'il faut mettre esi et non si tout seul. Le e activerait l'interprétation php de la chaine de retour.
 
 $var = preg_replace("#?!(<table>.*?</table> )#esi",nl2br('\\1'),$var);  
 
CA doit marcher un truc du genre. Ca prend tout ce qui n'est pas entre balises table et applique le traitement. Pas le temps de vérifier ;)

Reply

Marsh Posté le 09-01-2004 à 18:07:39    

belgique a écrit :

je crois qu'il faut mettre esi et non si tout seul. Le e activerait l'interprétation php de la chaine de retour.
 
 $var = preg_replace("#?!(<table>.*?</table> )#esi",nl2br('\\1'),$var);  
 
CA doit marcher un truc du genre. Ca prend tout ce qui n'est pas entre balises table et applique le traitement. Pas le temps de vérifier ;)


 
Warning: Compilation failed: nothing to repeat at offset 0 in c:\serveur\www\bouffe.php on line 56  :sweat:


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 09-01-2004 à 18:32:15    

$var = preg_replace("#?!(<table>.*?</table> )#esi","nl2br('\\1')",$var);  
 
C'est peut ere toujours incorrect mais bon, cherche un peu ;)

Reply

Marsh Posté le 09-01-2004 à 19:26:01    

$var = preg_replace("#(.*?)(<table>.*?</table> )#esi","nl2br('\\1')",$var);
 
En faisant ca, le message disparait mais le resultat n'est pas au rdv.
 
Je crois que je vais finir par garder ma methode barbare.


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 09-01-2004 à 20:16:14    

$var = preg_replace("#(?!(<table>.*?</table> ))#esi","nl2br('\\1')",$var);    
et ça?

Reply

Marsh Posté le 09-01-2004 à 21:30:17    

Ben y a plus d'erreur, tout les truc sont affiché mais y a pas de saut de ligne :(
 
La fonction preg_replace, j'arrive a me debrouiller quand c'est simple mais la j'ai du mal a suivre.


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 09-01-2004 à 21:48:55    

$var = preg_replace("#<table>(.*?)</table>#esi","'<table>'.stripslashes(str_replace('<br />','','\\1')).'</table>'",$var);    
Ca devrait marcher ça. Tu fais un nl2br avant sur var.

Reply

Marsh Posté le 09-01-2004 à 22:20:34    

:bounce:  
 
OK ca roule, j'ai tres legerement modifié le truc pour mettre une balise "special".
 
$var = preg_replace("#<body>(.*?)</body>#esi","'<body>'.stripslashes(str_replace('<br />','','\\1')).'</body>'", $var );
 
Au debut, ca marchait pas car mes balise <table> etait plutot de genre <table .....></table>
 
Je pense que je vais creer des balise que je vais nommé [html] dans lequel tout code html devra se trouver
 
 ;)


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le 09-01-2004 à 22:49:19    

Tu peux faire : $var = preg_replace("#<table(.*?)</table>#esi","'<table'.stripslashes(str_replace('<br />','','\\1')).'</table>'",$var);


Message édité par belgique le 09-01-2004 à 22:52:02
Reply

Marsh Posté le 09-01-2004 à 22:51:44    

Ah oui, c'est vrai aussi ca
 
Enfin bon, je vais voir ca avec le futur utilisateur.
 
merci a toi ;)


---------------
http://www.menuiseriemerceron.fr - http://www.atlantiquecoloration.fr
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed