Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMPILATEUR/DÉCOMPILATEUR DE BCODE


Information sur la source

Catégorie :Chaîne de caratère Niveau : Débutant Date de création : 27/04/2003 Date de mise à jour : 29/04/2003 22:55:35 Vu / téléchargé: 4 429 / 225

Note :
6,67 / 10 - par 6 personnes
6,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

Description

Ces fonctions servent a convertir un texte avec du BCode en code HTML et inverssement.
Le BCode, pour balise code, que j'ai utilisé est très fortement inspiré du célèbre BBCode de phppBB, il permet simplement et rapidement de donner vie aux news et tutos de votre site, en utilisant un code de balise simple lors de la saisie coté administrateur

A appeller avant chaque ajout ou modification d'une news ou tuto dans la base de données, et inverssement à l'édition coté administrateur.

il ne vous reste plus qu'a créer la page d'ajout de news approprié :)      
 

Source

  • <?
  • // Fonction qui transforme un texte avec du BCode en texte avec du code HTML
  • function compile($corps) {
  • // Permet de gérer les espaces avant un caractère, en debut de texte
  • // cette fonction va chercher le nombre d'espace et les remplacerer par '&nbsp; autant de fois qu'il le faut.
  • $corps=preg_replace('/^( +)(\S{1})/e', "str_repeat('&nbsp;',strlen('\\1')).'\\2'", $corps);
  • // De même, mais pour chaque debut de phrase en debut de phrase
  • $corps=preg_replace('/\n(\ *)(\S?)/e', "'<br>'.str_repeat('&nbsp;',strlen('\\1')).'\\2'", $corps);
  • // Permet de remplacer les balises de gras, par l'équivalent en HTML : [b]texte[/b]
  • $corps=str_replace('[b]', '<b>', $corps);
  • $corps=str_replace('[/b]', '</b>', $corps);
  • // De même pour l'italique : [i]texte[/i]
  • $corps=str_replace('[i]', '<i>', $corps);
  • $corps=str_replace('[/i]', '</i>', $corps);
  • // De même pour le soulignement : [s]texte[/s]
  • $corps=str_replace('[s]', '<u>', $corps);
  • $corps=str_replace('[/s]', '</u>', $corps);
  • // Permet de remplacer les balises de citation par une mise en forme adéquate : [quote]texte[/quote]
  • $corps=str_replace('[quote]', '<br><i>Citation<br>&nbsp;&nbsp;&nbsp;&nbsp;', $corps);
  • $corps=str_replace('[/quote]', '<br>/Citation</i><br>', $corps);
  • // Permet de remplacer les balises de couleur par du code HTML approprié : [color=COULEUR]texte[/color]
  • $corps=preg_replace('/\[color=(\w+)\]/', '<font color="\\1">', $corps);
  • $corps=str_replace('[/color]', '</font>', $corps);
  • // Permet de remplacer la balise image : [img]URL image[/img]
  • $corps=preg_replace('/\[img\](.+)\[\/img\]/', '<img src="\\1" align="center">', $corps);
  • // permet de remplacer la balise URL par un lien HTML
  • // 2 methodes differentes : [url]URL[/url] ou [url=URL]Texte[url]
  • $corps=preg_replace('/\[url\](http:\/\/|)(.+)\[\/url\]/', '<a href="http://\\2" target="_blank" class="corps">\\2</a>', $corps);
  • $corps=preg_replace('/\[url=(http:\/\/|)(.+)\](.+)\[\/url\]/', '<a href="http://\\2" target="_blank" class="corps">\\3</a>', $corps);
  • //permet de remplacer le code d'un smilie par l'image correspondante
  • $corps=str_replace(':D', '<img width="20" height="20" src="smilies/happy.gif">', $corps);
  • $corps=str_replace(':)', '<img width="20" height="20" src="smilies/smile.gif">', $corps);
  • $corps=str_replace(':p', '<img width="20" height="20" src="smilies/notify.gif">', $corps);
  • $corps=str_replace(';)', '<img width="20" height="20" src="smilies/winkin.gif">', $corps);
  • $corps=str_replace(':lol:', '<img width="20" height="20" src="smilies/lol.gif">', $corps);
  • $corps=str_replace('$)', '<img width="20" height="20" src="smilies/cool.gif">', $corps);
  • $corps=str_replace('8)', '<img width="20" height="20" src="smilies/blink.gif">', $corps);
  • $corps=str_replace(':|', '<img width="20" height="20" src="smilies/hmm.gif">', $corps);
  • $corps=str_replace(':?', '<img width="20" height="20" src="smilies/whatsthat.gif">', $corps);
  • $corps=str_replace(':(', '<img width="20" height="20" src="smilies/mad.gif">', $corps);
  • $corps=str_replace(':[', '<img width="20" height="20" src="smilies/bad.gif">', $corps);
  • return $corps;
  • }
  • // Fonction qui transforme un texte avec du code HTML en texte avec du BCode a l'instar de la première fonction
  • function decompile($corps) {
  • $corps=preg_replace('/^(&nbsp;+)(\S{1})/e', "str_repeat(' ',(strlen('\\1')/6)).'\\2'", $corps);
  • $corps=preg_replace('/<br>(&nbsp;*)(\S?)/e', "str_repeat(' ',(strlen('\\1')/6)).'\\2'", $corps);
  • $corps=str_replace('<br>', '', $corps);
  • $corps=str_replace('<br><i>Citation<br>&nbsp;&nbsp;&nbsp;&nbsp;', '[quote]', $corps);
  • $corps=str_replace('<br>/Citation</i><br>', '[/quote]', $corps);
  • $corps=str_replace('<b>', '[b]', $corps);
  • $corps=str_replace('</b>', '[/b]', $corps);
  • $corps=str_replace('<i>', '[i]', $corps);
  • $corps=str_replace('</i>', '[/i]', $corps);
  • $corps=str_replace('<u>', '[s]', $corps);
  • $corps=str_replace('</u>', '[/s]', $corps);
  • $corps=preg_replace('/<font color="(\w+)">/', '[color=\\1]', $corps);
  • $corps=str_replace('</font>', '[/color]', $corps);
  • $corps=preg_replace('/<img src="(.+)" align="center">/', '[img]\\1[/img]', $corps);
  • $corps=preg_replace('/<a href="http:\/\/(.+)" target="_blank" class="corps">(.+)<\/a>/', '[url=http://\\1]\\2[/url]', $corps);
  • $corps=str_replace('<img width="20" height="20" src="smilies/happy.gif">', ':D', $corps);
  • $corps=str_replace('<img width="20" height="20" src="smilies/smile.gif">', ':)', $corps);
  • $corps=str_replace('<img width="20" height="20" src="smilies/notify.gif">', ':p', $corps);
  • $corps=str_replace('<img width="20" height="20" src="smilies/winkin.gif">', ';)', $corps);
  • $corps=str_replace('<img width="20" height="20" src="smilies/lol.gif">', ':lol:', $corps);
  • $corps=str_replace('<img width="20" height="20" src="smilies/cool.gif">', '$)', $corps);
  • $corps=str_replace('<img width="20" height="20" src="smilies/blink.gif">', '8)', $corps);
  • $corps=str_replace('<img width="20" height="20" src="smilies/hmm.gif">', ':|', $corps);
  • $corps=str_replace('<img width="20" height="20" src="smilies/whatsthat.gif">', ':?', $corps);
  • $corps=str_replace('<img width="20" height="20" src="smilies/mad.gif">', ':(', $corps);
  • $corps=str_replace('<img width="20" height="20" src="smilies/bad.gif">', ':[', $corps);
  • return $corps;
  • }
  • // \w : [0-9a-zA-z]
  • // . : n'impporte quels caracteres sauf \n
  • // + : 1 ou plusieurs fois
  • // * : 0 ou plusieurs fois
  • // \ :echape
  • // \S : n'impporte quels caracteres sauf \n, \t, \r
  • // {1} : un et un seul
  • ?>
<?

// Fonction qui transforme un texte avec du BCode en texte avec du code HTML
function compile($corps) {
	// Permet de gérer les espaces avant un caractère, en debut de texte
	// cette fonction va chercher le nombre d'espace et les remplacerer par '&nbsp; autant de fois qu'il le faut.
	$corps=preg_replace('/^( +)(\S{1})/e', "str_repeat('&nbsp;',strlen('\\1')).'\\2'", $corps);
	// De même, mais pour chaque debut de phrase en debut de phrase
	$corps=preg_replace('/\n(\ *)(\S?)/e', "'<br>'.str_repeat('&nbsp;',strlen('\\1')).'\\2'", $corps);
	// Permet de remplacer les balises de gras, par l'équivalent en HTML : [b]texte[/b]
	$corps=str_replace('[b]', '<b>', $corps);
	$corps=str_replace('[/b]', '</b>', $corps);
	// De même pour l'italique : [i]texte[/i]
	$corps=str_replace('[i]', '<i>', $corps);
	$corps=str_replace('[/i]', '</i>', $corps);
	// De même pour le soulignement : [s]texte[/s]
	$corps=str_replace('[s]', '<u>', $corps);
	$corps=str_replace('[/s]', '</u>', $corps);
	// Permet de remplacer les balises de citation par une mise en forme adéquate : [quote]texte[/quote]
	$corps=str_replace('[quote]', '<br><i>Citation<br>&nbsp;&nbsp;&nbsp;&nbsp;', $corps);
	$corps=str_replace('[/quote]', '<br>/Citation</i><br>', $corps);
	// Permet de remplacer les balises de couleur par du code HTML approprié : [color=COULEUR]texte[/color]
	$corps=preg_replace('/\[color=(\w+)\]/', '<font color="\\1">', $corps);
	$corps=str_replace('[/color]', '</font>', $corps);
	// Permet de remplacer la balise image : [img]URL image[/img]
	$corps=preg_replace('/\[img\](.+)\[\/img\]/', '<img src="\\1" align="center">', $corps);
	// permet de remplacer la balise URL par un lien HTML
	// 2 methodes differentes : [url]URL[/url] ou [url=URL]Texte[url]
	$corps=preg_replace('/\[url\](http:\/\/|)(.+)\[\/url\]/', '<a href="http://\\2" target="_blank" class="corps">\\2</a>', $corps);
	$corps=preg_replace('/\[url=(http:\/\/|)(.+)\](.+)\[\/url\]/', '<a href="http://\\2" target="_blank" class="corps">\\3</a>', $corps);
	//permet de remplacer le code d'un smilie par l'image correspondante
	$corps=str_replace(':D', '<img width="20" height="20" src="smilies/happy.gif">', $corps);
	$corps=str_replace(':)', '<img width="20" height="20" src="smilies/smile.gif">', $corps);
	$corps=str_replace(':p', '<img width="20" height="20" src="smilies/notify.gif">', $corps);
	$corps=str_replace(';)', '<img width="20" height="20" src="smilies/winkin.gif">', $corps);
	$corps=str_replace(':lol:', '<img width="20" height="20" src="smilies/lol.gif">', $corps);
	$corps=str_replace('$)', '<img width="20" height="20" src="smilies/cool.gif">', $corps);
	$corps=str_replace('8)', '<img width="20" height="20" src="smilies/blink.gif">', $corps);
	$corps=str_replace(':|', '<img width="20" height="20" src="smilies/hmm.gif">', $corps);
	$corps=str_replace(':?', '<img width="20" height="20" src="smilies/whatsthat.gif">', $corps);
	$corps=str_replace(':(', '<img width="20" height="20" src="smilies/mad.gif">', $corps);
	$corps=str_replace(':[', '<img width="20" height="20" src="smilies/bad.gif">', $corps);
	
	return $corps;
}

// Fonction qui transforme un texte avec du code HTML en texte avec du BCode a l'instar de la première fonction
function decompile($corps) {
	$corps=preg_replace('/^(&nbsp;+)(\S{1})/e', "str_repeat(' ',(strlen('\\1')/6)).'\\2'", $corps);
	$corps=preg_replace('/<br>(&nbsp;*)(\S?)/e', "str_repeat(' ',(strlen('\\1')/6)).'\\2'", $corps);
	$corps=str_replace('<br>', '', $corps);
	$corps=str_replace('<br><i>Citation<br>&nbsp;&nbsp;&nbsp;&nbsp;', '[quote]', $corps);
	$corps=str_replace('<br>/Citation</i><br>', '[/quote]', $corps);
	$corps=str_replace('<b>', '[b]', $corps);
	$corps=str_replace('</b>', '[/b]', $corps);
	$corps=str_replace('<i>', '[i]', $corps);
	$corps=str_replace('</i>', '[/i]', $corps);
	$corps=str_replace('<u>', '[s]', $corps);
	$corps=str_replace('</u>', '[/s]', $corps);
	$corps=preg_replace('/<font color="(\w+)">/', '[color=\\1]', $corps);
	$corps=str_replace('</font>', '[/color]', $corps);
	$corps=preg_replace('/<img src="(.+)" align="center">/', '[img]\\1[/img]', $corps);
	$corps=preg_replace('/<a href="http:\/\/(.+)" target="_blank" class="corps">(.+)<\/a>/', '[url=http://\\1]\\2[/url]', $corps);
	
	$corps=str_replace('<img width="20" height="20" src="smilies/happy.gif">', ':D', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/smile.gif">', ':)', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/notify.gif">', ':p', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/winkin.gif">', ';)', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/lol.gif">', ':lol:', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/cool.gif">', '$)', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/blink.gif">', '8)', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/hmm.gif">', ':|', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/whatsthat.gif">', ':?', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/mad.gif">', ':(', $corps);
	$corps=str_replace('<img width="20" height="20" src="smilies/bad.gif">', ':[', $corps);
	
	return $corps;
}

// \w : [0-9a-zA-z] 
// . : n'impporte quels caracteres sauf \n 
// + : 1 ou plusieurs fois
// * : 0 ou plusieurs fois
// \ :echape
// \S : n'impporte quels caracteres sauf \n, \t, \r
// {1} : un et un seul

?>

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Wize le 29/04/2003 22:59:36

voila le code est dispo sur le site
si vous avez besoin de plus de détails, n'hésitez pas a demander

en esperant que ça va servir à certain :)

signaler à un administrateur
Commentaire de i0Lo le 24/05/2003 12:25:06

mmmmm trés sympa surtout qu'on peut faire même un blocage des codes  HMTL et PHP dans une zone de texte ( sachant que les trucs en javascripts sont pas beaux :
Une bonne source , trés appréciable et qui m'a beaucoup servi . 10/10

signaler à un administrateur
Commentaire de Ofal le 05/06/2003 10:00:10

une amélioration serai de remplacer :
    $corps=str_replace('[b]', '&lt;b&gt;', $corps);
    $corps=str_replace('[/b]', '&lt;/b&gt;', $corps);

par un :

preg_replace

qui par concéquent remplacera que si la balise commencé est fermé


et puis , à l époque du php 4 , les \2 peuvent se remplacer par $2 ( ce qui est a mon avis plus lisible )


c est cependant un très bon script , j ai fait a peu pres le meme il y a 2 semaines de ca ....


par contre , j arrive pas a ne pas transformer les smiley qui sont entre deux balise [url]... ( et à voir ce script , toi nonplus ) ...

si tu y arrive , ca serai de la pure bombe de me dire comment ( en replyant a ce message par exemple .. )

signaler à un administrateur
Commentaire de Wize le 05/06/2003 11:23:14

merci i0lo :)

pour Ofal, il est vrai que des preg seraient mieux, j'y avais pas passé a le jour et pour les $ aussi.
il faut dire que j'ai crée ce script, sans meme connaitre les fonctions de remplacement ( a part str_replace) et encore moins les expressions reguliere.
je sais ce que je vais faire pour la mise jour :D

en ce qui concerne l'url, j'ai le meme probleme, et c'est pour cela que dans mon cas, j'ai choisi un codage des smilies, qui ne pourons jamais etre integré dans une url.
il y a tjrs un deux points ou une parenthese.
voila c'est la seul solution que je peux te proposer, a part verifier a chaqe fois si le code n'est pas dans une balise url !!!! (lourd a gerer)

merci pour les commentaires

signaler à un administrateur
Commentaire de kzimir666 le 27/06/2003 17:16:49

Je trouve ce code génial, mais j'ai un problème avec... quand je met pluisieurs liens du type : [url]MONLIEN[/url] ou encore [url=MONLIEN]LELIEN[/url] à la suite, et bien le résultat donne n'importe koi... Je ne vois pas comment corriger... et je ne sais pas d'où viens le problème, il faut dire que je ne connais pas bien la fonction preg_replace()
Si kelkun pouvait m'aider...

signaler à un administrateur
Commentaire de montoya le 22/10/2003 11:49:02

J'ai trouvé le petit défault :
Il faut remplacer ca :

$corps=preg_replace('/[url](http://|)(.+)[/url]/', '&lt;a href="http://\2" target="_blank" class="corps"&gt;\2&lt;/a&gt;', $corps);
    $corps=preg_replace('/[url=(http://|)(.+)](.+)[/url]/', '&lt;a href="http://\2" target="_blank" class="corps"&gt;\3&lt;/a&gt;', $corps);

Par :

$corps = preg_replace('/[url](.+?)[/url]/','&lt;a href="\1" target="_blanck" class="TEXTBLANC"&gt;\1&lt;/a&gt;',$corps);
$corps = preg_replace('/[url=(.+?)](.+?)[/url]/','&lt;a href="\1" target="_blank" class="TEXTBLANC"&gt;\2&lt;/a&gt;',$corps);

Et là, ca marche super bien !!!!!
@+

signaler à un administrateur
Commentaire de apz le 29/02/2004 23:33:12

Mais quelle est la fonction pour ajouter des balises BBCode dans le texte ?

par exemple rendre texte en &lt;b&gt;texte&lt;/b&gt;

signaler à un administrateur
Commentaire de montoya le 06/03/2004 15:08:27

comprends po ta question.

signaler à un administrateur
Commentaire de apz le 06/03/2004 17:02:58

je m'explique :

Quand on selectionne un texte dans le textearea, pour lui appliquer les balises BBCode tels que : [bold]texte[/blod] ou [italic]texte[/italic] ou [code]texte[/code], il y a une fonction qui fasse cela !

alors comment elle doir etre ?

merci.

signaler à un administrateur
Commentaire de spiderAlpha le 05/04/2004 21:04:06

Salut,
je trouve ton code exellent, mais comme dit plus haut, il y a un probléme avec les URL lorsqu'elles sont multiples.

Le code donné par montoya pour le corriger ne fonctionne pas, il retourne les erreurs suivantes :

Unknown modifier 'r' ......

Quel est donc le code à mettre pour supporter les deux types d'URL dans une même zone de texte ?

Merci

signaler à un administrateur
Commentaire de montoya le 05/04/2004 21:51:05

Bonsoir à tous.

Pour apz je ne vois pas.

Pour spiderAlpha voila un autre bout de code qui permet la transformation et qui devrai fonctioner :
$corp = preg_replace("/\[url\](.*?)\[\/url\]/si","&lt;a href=\"\\1\" target=\"_blank\"&gt;\\1&lt;/a&gt;",$corp);
$corp = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/si","&lt;a href=\"\\1\" target=\"_blank\"&gt;\\2&lt;/a&gt;",$corp);

++

signaler à un administrateur
Commentaire de Bensor le 29/06/2004 11:26:14

hmm j'ai pesque fait la même chose, mais je bloquais sur les liens. Je n'ai pas encore essayé de faire fonctionner tout ça, mais ça m'a l'air assez bien. 9/10 (il parait que y'a un petit problème dans ton code) :)

signaler à un administrateur
Commentaire de coucou747 le 30/11/2005 17:45:42

un compilateur produit un binaire...

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.