Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2759 connectés 

  FORUM HardWare.fr
  Programmation

  implémentation du BBCode dans un forum

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

implémentation du BBCode dans un forum

n°60028
oloide
Posté le 18-09-2001 à 11:12:13  profilanswer
 

salut,  
 
Je me pose des questions à propos du BBCode qui est souvent utilisé dans les forum pour formater le texte des messages :  
 
- quel est l'orifgine de ce code ?
- est il propriétaire ou bien libre ?
- comment faire pour l'implémenter dans son propre forum (à part le remplacement des [ g] par <b> par exemple lors de la sortie des texte de la base de donnée, je ne vois pas trop...
 
Car on est bien d'accord : ce code sert à ce qu'il n'y ai pas de problème de synthaxe de code html pour l'affichage de la suite de la page. Donc on désactive le code html (ou on le convertit pour qu'il ne soit pas interprétable) avant l'entrée dans la base de donnée. En sortie de la base de donnée (affichage du message) on remplace le code BBC par le code html correspondant.
Mais si un mes se trompe et ne met que [ g] et oublit de finir par [ /g] toute la suite va être en gras :ouch:
 
SVP si vous avez les algo de recherche ou des solutions du style chercher seulement "[ g]*[ /g]" que l'on remplace par "<b>*</b>"
ou un truc de ce style...

 

[edtdd]--Message édité par oloide--[/edtdd]

mood
Publicité
Posté le 18-09-2001 à 11:12:13  profilanswer
 

n°60071
oloide
Posté le 18-09-2001 à 13:48:59  profilanswer
 

up ! :hot::hot::hot:

 

[edtdd]--Message édité par oloide--[/edtdd]

n°60081
barbarella
Posté le 18-09-2001 à 14:27:58  profilanswer
 

bon,
 
on lui donne le truc ou on lui donne pas ;). Hummm, t'as un compte en suisse ? :D.

 

[edtdd]--Message édité par barbarella--[/edtdd]

n°60084
saxgard
Posté le 18-09-2001 à 14:32:54  profilanswer
 

bin moi ce que j'ai fais c que je test qu'il y  a bien la chaine
 
[ b ] et [ /b ] sinon je transforme pas
 
et comme ca il n'y a pas de pb
 
moi aussi j'avais rencontré le meme pb que toi , et en se qui concerne ce code je ne pense pas qu'il ya un driot particulier , tu a le droit je pense d'utliser cette syntaxe. Au pire rien ne t'empeche de creer ta propre syntaxe , mais bon la faut demander confirmation.
 
@+++

 

[edtdd]--Message édité par saxgard--[/edtdd]

n°60105
oloide
Posté le 18-09-2001 à 16:49:25  profilanswer
 

ok, mais dans ton test, saxgard, tu remplace aussi lorsqu'il y a par exemple : [ /b] [ b] et donc ça foire tout pareil!
 
barbarella > non, je n'ai pas de compte en suisse : je suis juste un petit étudiant en biologie !:sweat:

n°60106
barbarella
Posté le 18-09-2001 à 17:12:53  profilanswer
 

bon je vais te donner le truc qui te permet de conserver un temps linéaire dans la recherche de balise et leur conversion.
 
On va utiliser un tableau d'entier tab[n] ou chaque n correpond a une balise.
 
 
tu lis ta chaine A char par char et tu la copies dans une autre chaine B.
 
quand tu rencontres un [ tu testes si les char suivant forment une balise de type [X]
 
si test est positif alors tu copies la balise dans la chaine B et tu incrémentes ton tab[n] (ou n correpnd a la balsie trouvé)
 
Si négatif tu testes si c'est une balise de type [/X]
 
si test est positif alors tu copies la balise dans la chaine B et tu Décrémentes ton tab[n] (ou n correpnd a la balise trouvé)
 
Si ça ne correspond a aucune balise tu ne transforme rien. tu copies juste le char de A vers B.
 
une fois tous les char lu et la boucle fini. Tu fais une boucle qui inspecte le tableau. Si tab[n] = 1 alors tu ajoutes une balise de type [/X].
 
Personnelement j'utilise une variante de mon algo qui bloque l'imbrication pour eviter d'avoir des <B><S><B></B><B></S></B></B>
 
Je n'incrémente le tableau que s'il est a zéro (tab[n] = 0), sinon je ne transforme pas la balise et je ne décrémente que s'il est a 1 sinon je ne transforme pas.

 

[edtdd]--Message édité par barbarella--[/edtdd]

n°60113
oloide
Posté le 18-09-2001 à 17:25:38  profilanswer
 

ok merci.
 
J'imprime ta réponse et je m'isole pour y réfléchir !

n°60165
deweb
new bee
Posté le 18-09-2001 à 20:49:37  profilanswer
 

il y a des fonctions en PHP et Perl (ça dépend en quel langage est ton forum) qui permettent de gérer tout ça bien plus rapidement, avec les expressions régulières.
 
 exemple en PHP pour le tag [ b ] si ton texte est dans la variable $s
 
 $s=preg_replace("/(\[b\])(.*?)(\[\/b\])/si", "<b>\\2</b>", $s);
 
 c'est sensiblement du même tonneau en Perl avec ~s/

n°60171
barbarella
Posté le 18-09-2001 à 21:02:18  profilanswer
 

plus rapide ?
 
je ne connais pas cette fonction (normal je ne maitrise pas le php. mais tu es bien obligé de relancer la fonction autant de fois que tu as de balises ? Si oui dans ce cas si tu gères 10 balises différentes tu parcours 10 fois la chaine, alors qu'avec l'algo ci-dessus c'est 1 fois.  
 
Au fait la commande elle gère les trucs du genres
 <B>..<B> ... </B>  
et ajoute la balise manquante ? m'étonnerait fort.
 
Mais explique toujours j'ai hate d'accroitre mes connaissances :)

n°60172
deweb
new bee
Posté le 18-09-2001 à 21:06:15  profilanswer
 

non ça remplace automatiquement dans tout le texte tous les couples [ b ] [ /b ]  par < b > < /b > et préserve le texte en dedans et à l'extérieur.

mood
Publicité
Posté le 18-09-2001 à 21:06:15  profilanswer
 

n°60173
barbarella
Posté le 18-09-2001 à 21:09:14  profilanswer
 

donc,
 
il faut bien lancer la fonction pour chaque balise, c'est ça ? (si le forum gère les S,B,U,I,H1,Blockquote,strong,Center,...)

n°60174
deweb
new bee
Posté le 18-09-2001 à 21:11:09  profilanswer
 

en fait elle peut paraître un peu biscornue du premier abord, mais la voici décomposée :
 
 /(\[b\])(.*?)(\[\/b\])/si
 
 - les // indiquent l'expression qui doit correspondre
 - le s à la fin signifie que la recherche doit se faire sur plusieurs lignes, càd que si le [ b ] commence sur une ligne et finit sur la suivante ça doit en tenir compte.
 - le i à la fin ignore la casse, càd qu'un [ B ] sera pris en compte
 
 ensuite il y a 3 éléments :
 
 (\[b\]) : le premier tag, j'ai du mettre des \ caractères d'échappement parce que les signes [ ] correspondent à une signalétique eux aussi
 
 (.*?) : signifie tout caractère (le .) fois (*) un nombre infini de fois (?)
 
 (\[\/b\]) : la fin du tag

n°60178
barbarella
Posté le 18-09-2001 à 21:17:17  profilanswer
 

merci,
 
au fait qui a dit que le C était difficile a lire :D

n°60179
deweb
new bee
Posté le 18-09-2001 à 21:17:43  profilanswer
 

oui il faut lancer pour chaque balise.
 tout dépend de la sécurité à adopter, il y a des balises html qu'on peut tolérer (b,i,ul,li,center,etc...) et d'autres pas car elles peuvent casser la page ou provoquer des événements javascript.
 
 un petit  
 $s=strip_tags($s,"<a>,<i>,<u>,<b>,<br>,<font>,<im
g>,<marquee>,<big>,<blockquote>,<center>,<hr>,<pre
>,<small>,<ul>,<li>" );
 
 supprime tous les tags sauf ceux énumérés dans la liste

n°60182
barbarella
Posté le 18-09-2001 à 21:24:07  profilanswer
 

je ne sais pas en quoi oloide programme, mais en ce qui me concerne en C la vitesse de traitement des balises est nettement plus rapide que ce que tu me montres.
 
Mais bon ça a d'autres désavantages, et puis c'est une autre discussion ;)
 
merci de l'info.

 

[edtdd]--Message édité par barbarella--[/edtdd]

n°60183
deweb
new bee
Posté le 18-09-2001 à 21:27:28  profilanswer
 

tout dépend de l'implémentation des regexp, en C ça existe aussi certainement et c'est très performant, beaucoup plus que de traiter le texte caractère par caractère et tellement plus simple :)  
 
 sur un texte long (65000 chars) ça met max 5ms pour faire le tour de 10 balises. en PHP en tout cas...

n°60184
barbarella
Posté le 18-09-2001 à 21:39:08  profilanswer
 

sisi,
 
en C l'algo que j'ai donnée est rapide, pfff tu peux pas savoir :).

n°60185
deweb
new bee
Posté le 18-09-2001 à 21:42:05  profilanswer
 

oui mais va réaliser un forum en C...  :na:

n°60189
oloide
Posté le 18-09-2001 à 21:47:40  profilanswer
 

wouahou !!!
 
deweb, je te remerci car justement je fait mon forum en php et comme j'ai un bouquin qui traite seulement en 2 petites pages des expressions régulières, je ne pensais pas qu'elle étaient si puissantes !
 
J'allais justement essayer de suivre l'algo décrit par barbarella ... mais bon vu que je suis un biologiste pur et dur et que je n'ai jamais eu de cours d'info et encore moins d'algo ben ça auraiyt était un peu difficile!
 
en tout cas merci, je vais peut-être enfin finir mon forum :hello:

n°60191
barbarella
Posté le 18-09-2001 à 21:53:06  profilanswer
 

Oloide,
 
en PHP la solution de deweb me parait aussi bcp plus interessante.  
 
Deweb,
 
un forum en C ... laisse moi réflechir :D
 
http://www.onversity.com/load/forum.gif

 

[edtdd]--Message édité par barbarella--[/edtdd]

n°60197
deweb
new bee
Posté le 18-09-2001 à 22:28:36  profilanswer
 

un forum en PHP... laisse-moi trouver l'url...  
 http://www.estvideo.net/forum/  :D
 made by myself :)

n°60202
barbarella
Posté le 18-09-2001 à 22:48:38  profilanswer
 

arfff,
 
je sais j'aurais bien aimez pouvoir les utiliser, mais bon ... bah je commence a revoir le bout alors ça gazouille

n°60243
saxgard
Posté le 19-09-2001 à 09:23:43  profilanswer
 

oloide non je ne remplace pas quand j'ai [ b] ou [ /b]
 
debut=InStr(compteur, Message2, "" )+3
fin=InStr(compteur, Message2, "
" )
If (debut>0 and fin>0 and fin>0 and (fin-debut)>0) Then
  mess=Mid(Message2,debut,(fin-debut))
  Message2=Replace(Message2, ""& mess, "<b>" & mess, 1, 1)
  Message2=Replace(Message2, "
","</b>", 1, 1)
End If
 
voilou bin c du vbscript mais bon si ca peut t'aider aussi
d'autant plus moi aussi j'avais chercher avec les expression régulière mais en vb j'avais eu des petits pb ;)
 
@++

n°60259
oloide
Posté le 19-09-2001 à 10:25:03  profilanswer
 

merci à tous, ça marche trés bien avec les expressions régulières.

n°60264
gilou
Modérateur
Modzilla
Posté le 19-09-2001 à 11:05:35  profilanswer
 

les balises ubb ca vient de Ultimate Bulletin Board, un des premiers forums commerciaux, implemente en perl.
La boite s'est ensuite renommee madrona, puis infopop ( http://www.infopop.com/ ).
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°60406
Freekill
Electron libre…
Posté le 19-09-2001 à 17:01:41  profilanswer
 

deweb a écrit a écrit :

il y a des fonctions en PHP et Perl (ça dépend en quel langage est ton forum) qui permettent de gérer tout ça bien plus rapidement, avec les expressions régulières.
 
 exemple en PHP pour le tag [ b ] si ton texte est dans la variable $s
 
 $s=preg_replace("/(\[b\])(.*?)(\[\/b\])/si", "<b>\\2</b>", $s);
 
 c'est sensiblement du même tonneau en Perl avec ~s/  




 
Merci, c'est plus propre que les eregi_replace() que j'utilisais.
 
Pfff... Ces expressions régulières...  :pt1cable:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  implémentation du BBCode dans un forum

 

Sujets relatifs
DC Forum 2000forum php aidez moi svp
forum sans base de donnée ?forum hardware && compression ZLib
indexation pour recherche forum ???Comment creer son FORUM de A a Z...
où trover un forum?[PHP] forum en php : je m'y lance ou pas ???
[Forum] Liens en accès directC koi ce forum php (celui ou on ai )?
Plus de sujets relatifs à : implémentation du BBCode dans un forum


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR