23

bbcode

bbcode
SYNOPSIS

bbcode($s)

DESCRIPTION

bbcode retourne la conversion du balisage BBCode de la chaîne de caractères $s en HTML.

Les caractères spéciaux HTML sont protégés avant que les balises BBCode ne soient traitées.

Les blocs de code peuvent être colorés syntaxiquement avec GeSHi.

EXEMPLE

Pour convertir un balisage BBCode en HTML :

php > define('ROOT_DIR', __DIR__);
php > set_include_path(ROOT_DIR . DIRECTORY_SEPARATOR . 'includes' . PATH_SEPARATOR . get_include_path());
php > require 'library/bbcode.php';
php > $s='[p][b]iZend[/b] is available at [url]https://www.izend.org[/url].[/p]';
php > echo bbcode($s);
<p><b>iZend</b> is available at <a href="https://www.izend.org">https://www.izend.org</a>.</p>
CODE
  1. require_once 'geshi.php';
  2.  
  3. function bbcode($s) {
  4.     static $bbcode = array(
  5.         '#\[br\]#is'                    => '<br />',
  6. //      '#\[(h[4-6])\](.+?)\[/\1\]#is'  => '<\1>\2</\1>',
  7.         '#\[b\](.+?)\[/b\]#is'          => '<b>\1</b>',
  8.         '#\[i\](.+?)\[/i\]#is'          => '<i>\1</i>',
  9.         '#\[u\](.+?)\[/u\]#is'          => '<u>\1</u>',
  10.         '#\[s\](.+?)\[/s\]#is'          => '<s>\1</s>',
  11.         '#\[p\](.+?)\[/p\]#is'          => '<p>\1</p>',
  12.         '#\[pre\](.+?)\[/pre\]#is'      => '<pre>\1</pre>',
  13.         '#\[quote\](.+?)\[/quote\]#is'  => '<blockquote>\1</blockquote>',
  14. //      '#\[small\](.+?)\[/small\]#is'  => '<span class="smaller">\1</span>',
  15. //      '#\[big\](.+?)\[/big\]#is'      => '<span class="larger">\1</span>',
  16.     );
  17.  
  18.     $s = preg_replace_callback('#\[code([^\]]*?)\](.*?)\[/code\]#is', function ($m) { return '[code' . $m[1] . ']' . bbcode_protect($m[2]) . '[/code]'; }, $s);
  19.  
  20.     $s = htmlspecialchars($s, ENT_COMPAT, 'UTF-8');
  21.  
  22.     $s = preg_replace(array_keys($bbcode), array_values($bbcode), $s);
  23.  
  24.     $bbcode_cb = array(
  25.         '#\[url\=(.+?)\](.*?)\[/url\]#is'       => function($m) { return filter_var($m[1], FILTER_VALIDATE_URL) ? '<a href="' . $m[1] . '">' . $m[2] . '</a>' : $m[0]; },
  26.         '#\[url](.*?)\[/url\]#is'               => function($m) { return filter_var($m[1], FILTER_VALIDATE_URL) ? '<a href="' . $m[1] . '">' . $m[1] . '</a>' : $m[0]; },
  27.         '#\[(e?mail)\=(.+?)\](.*?)\[/\1\]#is'   => function($m) { return filter_var($m[2], FILTER_VALIDATE_EMAIL) ? '<a href="mailto:' . $m[2] .'">' . $m[3] . '</a>' : $m[0]; },
  28.         '#\[(e?mail)\](.*?)\[/\1\]#is'          => function($m) { return filter_var($m[2], FILTER_VALIDATE_EMAIL) ? '<a href="mailto:' . $m[2] .'">' . $m[2] . '</a>' : $m[0]; },
  29.         '#\[code\=(.+?)\](.+?)\[/code\]#is'     => function($m) { return bbcode_highlite($m[2], $m[1]); },
  30.         '#\[code\](.+?)\[/code\]#is'            => function($m) { return bbcode_highlite($m[1]); },
  31.     );
  32.  
  33.     foreach ($bbcode_cb as $regexp => $f) {
  34.         $s = preg_replace_callback($regexp, $f, $s);
  35.     }
  36.  
  37.     return $s;
  38. }
  39.  
  40. function bbcode_protect($s) {
  41.     return base64_encode(preg_replace('#\\\"#', '"', $s));
  42. }
  43.  
  44. function bbcode_highlite($s, $language=false) {
  45.     $s = base64_decode($s);
  46.  
  47.     if (!$language) {
  48.         return '<code>' . htmlspecialchars($s, ENT_COMPAT, 'UTF-8') . '</code>';
  49.     }
  50.  
  51.     $geshi = new GeSHi($s, $language);
  52.     $geshi->enable_classes(true);
  53.     $geshi->set_header_type(GESHI_HEADER_DIV);
  54.     $geshi->enable_keyword_links(false);
  55.     $geshi->set_tab_width(4);
  56.  
  57.     $output = $geshi->parse_code();
  58.  
  59.     if ($geshi->error()) {
  60.         return false;
  61.     }
  62.  
  63.     head('stylesheet', 'geshi/' . $language, 'screen');
  64.  
  65.     return '<div class="geshi">' . $output . '</div>';
  66. }
VOIR AUSSI

pretty_file

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].