|
Trouver une ressource
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 !
DU BBCODE AU (X)HTML
Information sur la source
Description
Ce code permet d'utiliser du bbcode à la place du HTML, pour des raisons de sécurité et de simplicité pour les utilisateurs :) Merci de noter que c'est mon premier code sur phpcs ^__^' (voir tout premier code publié <__<') Pensez bien à prendre les balises <style></style> (configuration modifiable à souhait) Merci de signaler si vous voyez d'autres balises à ajouter dans les commentaires si il le faut :-)
Source
- <style>
- .code {
- border: 1px solid #657985;
- padding-left: 10px;
- background-color:#d3dbdf;
- }
-
- .quote {
- border: 1px dotted #657985;
- padding-left: 10px;
- background-color:#eeeeee;
- }
- </style>
- <?php
- //By Talus
- function parse_css($texte) {
- $texte[1] = html_entity_decode($texte[1], true);
-
- $texte[1] = preg_replace('`((.*)(:)(.*)(;))+`x','<span style="color: navy;">$2</span><span style="color: fuchsia;">$3</span><span style="color: blue;">$4</span><span style="color: fuchsia;">$5</span>', $texte[1]);
-
- $texte[1] = preg_replace('`((.*) \n? {)`x','<span style="color: fuchsia;">$1</span>', $texte[1]);
- $texte[1] = preg_replace('`(/\*(.*)\*/)`xs','<span style="color: gray;">$1</span>', $texte[1]);
- $texte[1] = str_replace('}','<span style="color: fuchsia;">}</span>', $texte[1]);
-
- $texte[1] = preg_replace('`<span style="color: (.*);">(.*)</span>`sU', '<span style="color:$1">[color=$1]$2[/color]</span>',$texte[1]);
-
- $texte[1] = str_replace('\n','', $texte[1]);
- $texte[1] = preg_replace('`(/\*\n?(.*)\n?\*/)`xsU','', $texte[1]);
-
- return '<br /><strong>Code CSS</strong> :<br /><div class="code">' . $texte[1] . '</div><br />';
- }
- function php_code($code){ //Colorisation de Code PHP
- return '<br /><div class="code_top">Script PHP :</div><div class="code_main">' . highlight_string(html_entity_decode($code[1]), true) . '</div><br />';
- }
- function forum_code($chaine,$xhtml = FALSE ){
- /* Paramètre autorisant (ou non) le HTML dans la chaine $chaine, et autorisant les sauts de lignes*/
- $chaine = nl2br(!$xhtml ? htmlentities($chaine) : $chaine);
-
- // Bloc des balises [url]-[/url]
- $chaine = preg_replace('`\[url=([http://].+?)](.+?)\[/url]`si','<a href="#" onclick="window.open(\'$1\',\'popup\');" title="$1">$2</a>',$chaine);
- $chaine = preg_replace('`\[url=(.+?)](.+?)\[/url]`si','<a href="#" onclick="window.open(\'http://$1\',\'popup\');" title="$1">$2</a>',$chaine);
- $chaine = preg_replace('`\[url]([http://].+?)\[/url]`si','<a href="#" onclick="window.open(\'$1\',\'popup\');" title="$1">$1</a>',$chaine);
- $chaine = preg_replace('`\[url](.+?)\[/url]`si','<a href="#" onclick="window.open(\'http://$1\',\'popup\');" title="$1">$1</a>',$chaine);
-
- // Bloc des balises [b]-[/b]
- $chaine = preg_replace('#\[b](.+?)\[/b]#si','<strong>$1</strong>',$chaine);
-
- // Bloc des balises [u]-[/u]
- $chaine = preg_replace('#\[u](.+?)\[/u]#si','<span style="text-decoration:underline;">$1</span>',$chaine);
-
- // Bloc des balises [i]-[/i]
- $chaine = preg_replace('#\[i](.+?)\[/i]#si','<em>$1</em>',$chaine);
-
- // Bloc des balises [strike]-[/strike]
- $chaine = preg_replace('#\[strike](.+?)\[/strike]#si','<span style="text-decoration:line-through;">$1</span>',$chaine);
-
- // Bloc des balises [overline]-[/overline]
- $chaine = preg_replace('#\[overline](.+?)\[/overline]#si','<span style="text-decoration:overline;">$1</span>',$chaine);
-
- // Bloc des balises [code]-[/code]
- $chaine = preg_replace('#\[code](.+?)\[/code]#si','<br /><strong>div :</strong> :<br /><div class="div">$1</div><br />',$chaine);
- $chaine = preg_replace_callback('#\[code=css](.+?)\[/code]#si','parse_css',$chaine);
- $chaine = preg_replace_callback('#\[code=php](.+?)\[/code]#si','php_code',$chaine);
-
- // Bloc des balises [quote]-[/quote]
- $chaine = preg_replace('#\[quote=me](.+?)\[/quote]#si','<br /><strong>J\'ai écrit</strong> :<br/><div class="quote">$1 </div><br />',$chaine);
- $chaine = preg_replace('#\[quote=(.+?)](.+?)\[/quote]#si','<br /><strong>$1 a écrit</strong> :<br/><div class="quote">$2 </div><br />',$chaine);
- $chaine = preg_replace('#\[quote](.+?)\[/quote]#si','<br /><strong>Citation</strong> :<br/><div class="quote">$1 </div><br />',$chaine);
-
- // Bloc des balises [img]-[/img]
- $chaine = preg_replace('#\[img=(.+?)](.+?)\[/img]#si','<img src="$1" border="0" alt="$2" />',$chaine);
- $chaine = preg_replace('#\[img](.+?)\[/img]#si','<img src="$1" border="0" />',$chaine);
-
- // Bloc des balises [mail]-[/mail]
- $chaine = preg_replace('#\[mail=([mailto:].+?)](.+?)\[/mail]#si','<a href="$1">$2</a>',$chaine);
- $chaine = preg_replace('#\[mail=(.+?)](.+?)\[/mail]#si','<a href="mailto:$1">$2</a>',$chaine);
- $chaine = preg_replace('#\[mail]([mailto:].+?)\[/mail]#si','<a href="$1">$1</a>',$chaine);
- $chaine = preg_replace('#\[mail](.+?)\[/mail]#si','<a href="mailto:$1">$1</a>',$chaine);
-
- // Bloc des balises [align]-[/align]
- $chaine = preg_replace('#\[align=(left|center|right)](.+?)\[/align]#si','<div style="text-align:$1; width:100%;">$2</div>',$chaine);
-
- // Bloc des balises [color]-[/color]
- $chaine = preg_replace('#\[color=(.+?)](.+?)\[/color]#si','<span style="color:$1;">$2</span>',$chaine);
-
- // Bloc des balises [size]-[/size]
- $chaine = preg_replace('#\[size=([0-9]{1,2})](.+?)\[/size]#si','<span style="font-size:$1px;">$2</span>',$chaine);
-
- // Bloc des balises [thick]-[/thick]
- $chaine = preg_replace('#\[thick=([0-9]{1,3})](.+?)\[/thick]#si','<span style="font-weight:$1px;">$2</span>',$chaine);
-
- // Bloc des balises [style]-[/style]
- $chaine = preg_replace('#\[style=(normal|italique|oblique)](.+?)\[/style]#si','<span style="font-style:$1;">$2</span>',$chaine);
-
- // Bloc des balises [weight]-[/weight]
- $chaine = preg_replace('#\[weight=(lighter|bold|bolder)](.+?)\[/weight]#si','<span style="font-weight:$1;">$2</span>',$chaine);
-
- // Bloc des balises [decoration]-[/decoration]
- $chaine = preg_replace('#\[decoration=(underline|line-through|overline|blink)](.+?)\[/decoration]#si','<span style="font-weight:$1;">$2</span>',$chaine);
-
- // Bloc des balises [font]-[/font]
- $chaine = preg_replace('#\[font=(.+?)](.+?)\[/font]#si','<span style="font-family:$1;">$2</span>',$chaine);
-
- // Bloc des balises [list]-[/list]
- $chaine = preg_replace('`\[list=(circle|disc|square|i)](.+?)\[/list]`si','<ul type="$1">$2</ul>',$chaine);
- $chaine = preg_replace('`\[list](.+?)\|/list]`si','<ul>$1</ul>',$chaine);
-
- // Bloc des balises [*]
- $chaine = preg_replace('`\[\*=(circle|disc|square|i)](.+?)`si','<li type="$1">$2',$chaine);
- $chaine = preg_replace('`\[\*](.+?)`si','<li>$1',$chaine);
-
- return $chaine;
- }
- // /!\ Appel de la fonction : echo forum_code($chaine);
- /* IMPORTANT : PENSEZ A METTRE LES STYLES (balises) POUR UNR BONNE MISE EN FORME DE CERTAINES BALISES TELLES QUE LES [div], [QUOTE] ! */
- echo forum_code('[code=php]<?php echo 'coucou'; ?>[/code]');
- ?>
<style>
.code {
border: 1px solid #657985;
padding-left: 10px;
background-color:#d3dbdf;
}
.quote {
border: 1px dotted #657985;
padding-left: 10px;
background-color:#eeeeee;
}
</style>
<?php
//By Talus
function parse_css($texte) {
$texte[1] = html_entity_decode($texte[1], true);
$texte[1] = preg_replace('`((.*)(:)(.*)(;))+`x','<span style="color: navy;">$2</span><span style="color: fuchsia;">$3</span><span style="color: blue;">$4</span><span style="color: fuchsia;">$5</span>', $texte[1]);
$texte[1] = preg_replace('`((.*) \n? {)`x','<span style="color: fuchsia;">$1</span>', $texte[1]);
$texte[1] = preg_replace('`(/\*(.*)\*/)`xs','<span style="color: gray;">$1</span>', $texte[1]);
$texte[1] = str_replace('}','<span style="color: fuchsia;">}</span>', $texte[1]);
$texte[1] = preg_replace('`<span style="color: (.*);">(.*)</span>`sU', '<span style="color:$1">[color=$1]$2[/color]</span>',$texte[1]);
$texte[1] = str_replace('\n','', $texte[1]);
$texte[1] = preg_replace('`(/\*\n?(.*)\n?\*/)`xsU','', $texte[1]);
return '<br /><strong>Code CSS</strong> :<br /><div class="code">' . $texte[1] . '</div><br />';
}
function php_code($code){ //Colorisation de Code PHP
return '<br /><div class="code_top">Script PHP :</div><div class="code_main">' . highlight_string(html_entity_decode($code[1]), true) . '</div><br />';
}
function forum_code($chaine,$xhtml = FALSE ){
/* Paramètre autorisant (ou non) le HTML dans la chaine $chaine, et autorisant les sauts de lignes*/
$chaine = nl2br(!$xhtml ? htmlentities($chaine) : $chaine);
// Bloc des balises [url]-[/url]
$chaine = preg_replace('`\[url=([http://].+?)](.+?)\[/url]`si','<a href="#" onclick="window.open(\'$1\',\'popup\');" title="$1">$2</a>',$chaine);
$chaine = preg_replace('`\[url=(.+?)](.+?)\[/url]`si','<a href="#" onclick="window.open(\'http://$1\',\'popup\');" title="$1">$2</a>',$chaine);
$chaine = preg_replace('`\[url]([http://].+?)\[/url]`si','<a href="#" onclick="window.open(\'$1\',\'popup\');" title="$1">$1</a>',$chaine);
$chaine = preg_replace('`\[url](.+?)\[/url]`si','<a href="#" onclick="window.open(\'http://$1\',\'popup\');" title="$1">$1</a>',$chaine);
// Bloc des balises [b]-[/b]
$chaine = preg_replace('#\[b](.+?)\[/b]#si','<strong>$1</strong>',$chaine);
// Bloc des balises [u]-[/u]
$chaine = preg_replace('#\[u](.+?)\[/u]#si','<span style="text-decoration:underline;">$1</span>',$chaine);
// Bloc des balises [i]-[/i]
$chaine = preg_replace('#\[i](.+?)\[/i]#si','<em>$1</em>',$chaine);
// Bloc des balises [strike]-[/strike]
$chaine = preg_replace('#\[strike](.+?)\[/strike]#si','<span style="text-decoration:line-through;">$1</span>',$chaine);
// Bloc des balises [overline]-[/overline]
$chaine = preg_replace('#\[overline](.+?)\[/overline]#si','<span style="text-decoration:overline;">$1</span>',$chaine);
// Bloc des balises [code]-[/code]
$chaine = preg_replace('#\[code](.+?)\[/code]#si','<br /><strong>div :</strong> :<br /><div class="div">$1</div><br />',$chaine);
$chaine = preg_replace_callback('#\[code=css](.+?)\[/code]#si','parse_css',$chaine);
$chaine = preg_replace_callback('#\[code=php](.+?)\[/code]#si','php_code',$chaine);
// Bloc des balises [quote]-[/quote]
$chaine = preg_replace('#\[quote=me](.+?)\[/quote]#si','<br /><strong>J\'ai écrit</strong> :<br/><div class="quote">$1 </div><br />',$chaine);
$chaine = preg_replace('#\[quote=(.+?)](.+?)\[/quote]#si','<br /><strong>$1 a écrit</strong> :<br/><div class="quote">$2 </div><br />',$chaine);
$chaine = preg_replace('#\[quote](.+?)\[/quote]#si','<br /><strong>Citation</strong> :<br/><div class="quote">$1 </div><br />',$chaine);
// Bloc des balises [img]-[/img]
$chaine = preg_replace('#\[img=(.+?)](.+?)\[/img]#si','<img src="$1" border="0" alt="$2" />',$chaine);
$chaine = preg_replace('#\[img](.+?)\[/img]#si','<img src="$1" border="0" />',$chaine);
// Bloc des balises [mail]-[/mail]
$chaine = preg_replace('#\[mail=([mailto:].+?)](.+?)\[/mail]#si','<a href="$1">$2</a>',$chaine);
$chaine = preg_replace('#\[mail=(.+?)](.+?)\[/mail]#si','<a href="mailto:$1">$2</a>',$chaine);
$chaine = preg_replace('#\[mail]([mailto:].+?)\[/mail]#si','<a href="$1">$1</a>',$chaine);
$chaine = preg_replace('#\[mail](.+?)\[/mail]#si','<a href="mailto:$1">$1</a>',$chaine);
// Bloc des balises [align]-[/align]
$chaine = preg_replace('#\[align=(left|center|right)](.+?)\[/align]#si','<div style="text-align:$1; width:100%;">$2</div>',$chaine);
// Bloc des balises [color]-[/color]
$chaine = preg_replace('#\[color=(.+?)](.+?)\[/color]#si','<span style="color:$1;">$2</span>',$chaine);
// Bloc des balises [size]-[/size]
$chaine = preg_replace('#\[size=([0-9]{1,2})](.+?)\[/size]#si','<span style="font-size:$1px;">$2</span>',$chaine);
// Bloc des balises [thick]-[/thick]
$chaine = preg_replace('#\[thick=([0-9]{1,3})](.+?)\[/thick]#si','<span style="font-weight:$1px;">$2</span>',$chaine);
// Bloc des balises [style]-[/style]
$chaine = preg_replace('#\[style=(normal|italique|oblique)](.+?)\[/style]#si','<span style="font-style:$1;">$2</span>',$chaine);
// Bloc des balises [weight]-[/weight]
$chaine = preg_replace('#\[weight=(lighter|bold|bolder)](.+?)\[/weight]#si','<span style="font-weight:$1;">$2</span>',$chaine);
// Bloc des balises [decoration]-[/decoration]
$chaine = preg_replace('#\[decoration=(underline|line-through|overline|blink)](.+?)\[/decoration]#si','<span style="font-weight:$1;">$2</span>',$chaine);
// Bloc des balises [font]-[/font]
$chaine = preg_replace('#\[font=(.+?)](.+?)\[/font]#si','<span style="font-family:$1;">$2</span>',$chaine);
// Bloc des balises [list]-[/list]
$chaine = preg_replace('`\[list=(circle|disc|square|i)](.+?)\[/list]`si','<ul type="$1">$2</ul>',$chaine);
$chaine = preg_replace('`\[list](.+?)\|/list]`si','<ul>$1</ul>',$chaine);
// Bloc des balises [*]
$chaine = preg_replace('`\[\*=(circle|disc|square|i)](.+?)`si','<li type="$1">$2',$chaine);
$chaine = preg_replace('`\[\*](.+?)`si','<li>$1',$chaine);
return $chaine;
}
// /!\ Appel de la fonction : echo forum_code($chaine);
/* IMPORTANT : PENSEZ A METTRE LES STYLES (balises) POUR UNR BONNE MISE EN FORME DE CERTAINES BALISES TELLES QUE LES [div], [QUOTE] ! */
echo forum_code('[code=php]<?php echo 'coucou'; ?>[/code]');
?>
Conclusion
Merci à XwZ du forum PHPDebutant qui m'a aidé à me démeler avec les Expressions Régulières ;o) Liste des balises (+ Explications) : ->[url=x]titre lien[/url] ->[url]adresse_lien[/url] -> [b]texte en gras[/b] -> [i]texte en italique[/i] -> [u]texte souligné[/u] -> [strike]texte barré[/strike] -> [overline]texte surligné[/overline] -> [code]code[/code] -> [code=css]Code CSS[/code] -> [code=php]Script PHP (! en incluant les ouvertures et fermetures !)[/code] ->[quote=me]Citation de vous[/quote] ->[quote=quelqu'un]Citation de quelqu'un[/quote] ->[quote]citation sans auteur / nom[/quote] ->[img=adresse_image]titre de l'image[/quote] ->[img]adresse_image[/img] -> [align]texte soit à gauche, soit au centre, soit à droite, soit justifié[/align] -> [color=x]texte en couleur x[/color] -> [size=x]texte d'une taille x[/size] -> [thick=x]texte d'une epaisseur x[/thick] -> [style]texte soit normal, soit italic, soit oblique[/style] -> [weight]texte soit gras clair, gras, ou gras foncé[/weight] -> [font=x]texte écrit dans la police x[/font] ->[list=(circle|disc|square|i)]list avec des puces en forme de cercle / disque / carrés / chiffres romains[/list] ->[list]texte listé[/list] ->[*]premier élément de la liste [*]2nd élément [*]3ème (.....) (avec les mêmes option que [list][/list]) Pour appeler appeler (utiliser) la fonction, pensez à mettre l'instruction <?php echo forum_code($chaine); ?> (ou <?php echo forum_code($chaine,true); ?> si vous voulez que le code html soit possible)
Historique
- 07 mai 2005 23:13:24 :
- 07 mai 2005 23:47:31 :
- Ajout de 3 balises : [font]-[/font], [size]-[/size], [color]-[/color]
- 08 mai 2005 01:03:30 :
- Correction de plusieurs petits bug :)
- 08 mai 2005 01:09:28 :
- J'ai enlevé les commentaires qui servaient à rien et qui n'expliquaient rien >_<
- 08 mai 2005 15:18:11 :
- ->Ajout de 5 balises
->Correction de certaines balises au standard XHTML.
- 08 mai 2005 15:19:53 :
- Correction d'une faute de frappe :p
- 08 mai 2005 15:48:09 :
- Correction d'un bug au niveau de la balise [img][/img]
- 08 mai 2005 15:50:00 :
- Compatibilité XTML accrue
- 08 mai 2005 16:05:15 :
- Compatibilité XHTML poru les balises [url]-[/url] améliorée
- 08 mai 2005 16:11:18 :
- Correction d'un bug mineur
- 08 mai 2005 17:36:46 :
- Ajout de 2 balise (bon une mais en 2 parties) + Explications des différents codes.
- 08 mai 2005 17:39:08 :
- Plus de clarté dans les differentes explications du fonctionnement du code
- 11 mai 2005 20:37:41 :
- Plus de compatibilité XHTML, et plus de clarté dans les explications.
- 11 mai 2005 21:19:43 :
- Compatibilité XHTLM accrue, et ajout de la balises <style></style> manquante qu'il devait y avoir (vous pouvez modifier les styles)
- 11 mai 2005 21:42:19 :
- Ajout des balises de mises en forme <style> & </style>, et un epu plus d'explication et correction d'un bug mineur.
- 13 mai 2005 11:56:43 :
- Changement dans la balise [align][/align].
- 16 mai 2005 18:50:48 :
- Possibilité de choix entre un html actif ou on, et j'ai enlevé une balise </style> qui ne devait pas être là :)
- 16 mai 2005 23:27:32 :
- Sauts de lignes possibles dans la chaine $chaine. (en attente d'un code peut-etre plus leger)
- 17 mai 2005 20:41:16 :
- Code plus compacte (possibilité d'activer / désactiver HTML)
- 08 juin 2005 09:17:45 :
- Correction d'un bug mineurs à propos de l'activation / desactivation du xhtml.
- 21 juin 2005 19:45:32 :
- Colorisation du code PHP =)
- 21 juin 2005 19:52:48 :
- Ajout de personnalisation du fond de la balise [code=php][/code] + explications sur sa facon de marcher =)
- 21 juin 2005 20:42:50 :
- Modification du nom de la fonction en un nom plus adapté =)
- 22 juillet 2005 13:06:58 :
- Ajout d'une balis permettant l'affichage de CSS et sa colorisation
- 25 janvier 2006 16:48:26 :
- Voilà, corrigé quelques bugs :P
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
|